2015-07-21 84 views
0

我正在使用ASP.Net身份和我的Web Api項目AccountController我想發送驗證郵件給新用戶。我已經使用MVCMailer將我的電子郵件服務插入ASP.Net身份。使用MVCMailer與ASP.Net Web Api

public class EmailService : IIdentityMessageService 
{ 
    private readonly IUserMailer _userMailer; 
    public EmailService(IUserMailer userMailer) 
    { 
     _userMailer = userMailer; 
    } 
    public Task SendAsync(IdentityMessage message) 
    { 
     _userMailer.DeliverMessage(message.Body); 
     // Plug in your email service here to send an email. 
     return Task.FromResult(0); 
    } 
} 
public class UserMailer : MailerBase, IUserMailer 
{ 
    public UserMailer() 
    { 
     MasterName = "_Layout"; 
    } 

    public virtual IMailMessage DeliverMessage(string message) 
    { 
     var mailMessage = new MailMessage(); 
     mailMessage.To.Add("[email protected]"); 
     mailMessage.Subject = "Welcome"; 

     //ViewData = new System.Web.Mvc.ViewDataDictionary(model); 
     PopulateBody(mailMessage, "Welcome"); 
     mailMessage.Send(); 
     return mailMessage; 
    } 

我自定義的ASP.Net Identiy是在一個單獨的項目。正如你上面看到的EmailService依賴於IUserMailer接口。和IUserMailer實現是另一個項目MyProject.MVCMailer(此項目是一個MVC項目)

在網頁API我的依賴解析器

我嘗試解決這種依賴 container.Bind<IUserMailer>().To<UserMailer>().InSingletonScope();

MVCMailer有一個依賴於System.Web.MVC和ninject抱怨的此參考初始化爲USerMailer

所以問題是在這裏我不想將System.Web.MVC添加到我的Web Api項目。

如何使用MVCMailer,而無需在我的web api項目中引用System.Web.MVC

回答

0

我對你想要做的事情有點困惑,但如果我正確理解你,你正試圖調用你的API,然後發送一封電子郵件。由於您沒有將API中的任何內容傳遞給電子郵件(即使您是),只需調用您的API並返回響應對象。一旦MVC項目收到響應,從MVC項目發送電子郵件。你的API應該知道你的MVC項目中的對象,除非有很好的理由。把它們(你的MVC和API項目)想象成兩個彼此不知道的獨立實體。

+0

謝謝你的回答。 api消費者是一款iOS應用。用戶只需從iOS應用程序註冊。成功註冊後,「_AppUserManager」是「ASP.Net Identity UserManager」的子類,嘗試發送電子郵件。 'AppUserManager'在一個單獨的類中。在那個單獨的類中,我有一個名爲'EmailService'的類,它需要一個IUserMailer實例來發送郵件。 IUserMailer實現在另一個名爲'MyApp.MVCMailer'的項目中,該項目是一個MVC項目。我的依賴注入駐留在MyApp.Web.API項目中。依賴注入器需要知道有關System.Web.MVC來創建IUserMailer。 –

+0

所有的事情我做我來到這裏添加一個引用System.Web.MVC到我的Web.Api項目。你可以創建一個MVCMailer發送郵件的示例web api嗎? –