2015-07-21 74 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吗? –