我正在使用ASP.Net Identity,并且在我的Web项目的AccountController中,我想向新用户发送验证电子邮件。我已经使用MVCMailer将我的电子邮件服务连接到ASP.Net身份。
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("hashemp206@yahoo.com");
mailMessage.Subject = "Welcome";
//ViewData = new System.Web.Mvc.ViewDataDictionary(model);
PopulateBody(mailMessage, "Welcome");
mailMessage.Send();
return mailMessage;
}我的自定义ASP.Net标识在一个单独的项目中。正如您在上面看到的,EmailService依赖于IUserMailer接口。而IUserMailer的实现在另一个项目MyProject.MVCMailer中(这个项目是一个MVC项目)
在web api中的依赖项解析器中,我尝试解析此依赖项container.Bind<IUserMailer>().To<UserMailer>().InSingletonScope();
但是MVCMailer对System.Web.MVC有依赖关系,并且只需要这个引用就可以初始化USerMailer。
所以问题来了,我不想把System.Web.MVC添加到我的Web项目中。
如何在我的web api项目中不引用System.Web.MVC的情况下使用MVCMailer?
发布于 2015-07-21 18:19:47
我对你想要做的事情有点困惑,但如果我没理解错的话,你是想调用你的API,然后发送一封电子邮件。由于您没有从API向电子邮件传递任何内容(即使您传递了),因此只需调用您的API并返回一个响应对象。一旦MVC项目收到响应,就从MVC项目发送电子邮件。你的API应该知道你的MVC项目中的对象,除非有一个非常好的理由。把它们(你的MVC和API项目)想象成两个彼此不了解的独立实体。
https://stackoverflow.com/questions/31536033
复制相似问题