C# 如何在不破坏我的服务层的情况下使用MVCMailer?
我正在研究使用电子邮件来制作更好的电子邮件 然而,我不确定的一件事是如何组织代码。我目前有2个项目。一个用于mvc,一个用于我的回购和服务层 我的第二个项目没有MVC的知识,我希望保持这种方式 我想我的smtp代码会进入服务层或包装器,然后当我需要发送电子邮件时,我会从其他服务层调用它C# 如何在不破坏我的服务层的情况下使用MVCMailer?,c#,asp.net-mvc,asp.net-mvc-3,mvcmailer,C#,Asp.net Mvc,Asp.net Mvc 3,Mvcmailer,我正在研究使用电子邮件来制作更好的电子邮件 然而,我不确定的一件事是如何组织代码。我目前有2个项目。一个用于mvc,一个用于我的回购和服务层 我的第二个项目没有MVC的知识,我希望保持这种方式 我想我的smtp代码会进入服务层或包装器,然后当我需要发送电子邮件时,我会从其他服务层调用它 那么MVC邮件程序在哪里合适呢?我是否在控制器中生成正文,然后将其传递给服务层,再将其传递给我的smtp类?MVCMailer似乎已经支持发送电子邮件。如果您正确设置配置,它应该能够通过电子邮件发送已填充的Mai
那么MVC邮件程序在哪里合适呢?我是否在控制器中生成正文,然后将其传递给服务层,再将其传递给我的smtp类?MVCMailer似乎已经支持发送电子邮件。如果您正确设置配置,它应该能够通过电子邮件发送已填充的MailerViews,而无需额外实现 我不确定您的第二个项目在解决方案中的作用,但有两种可能性:
我的解决方案是在服务层中构建接口,然后我的服务可以使用这些接口来获取邮件消息,而创建消息的实现继续驻留在web层中 接口位于服务层中:
public interface IMailMessage
{
void Send();
void SendAsync();
}
public interface IUserMailer
{
IMailMessage Welcome(WelcomeMailModel model);
}
然后在web(MVC)项目中实现:
最后,在服务层中,mailer接口是服务的依赖项:
public class UserCreationService : IUserCreationService
{
private readonly IUserRepository _repository;
private readonly IUserMailer _userMailer;
public UserCreationService(IUserRepository repository, IUserMailer userMailer)
{
_repository = repository;
_userMailer = userMailer;
}
public void CreateNewUser(string name, string email, string password)
{
// Create the user's account
_repository.Add(new User { Name = name, Email = email, Password = password });
_repository.SaveChanges();
// Now send a welcome email to the user
_userMailer.Welcome(new WelcomeMailModel { Name = name, To = email }).Send();
}
}
当连接到依赖项注入时,Services.IUserMail参数将使用Web.UserMailer对象来构造UserCreationService对象
我试图使示例保持简单,以便易于理解,但一旦您在服务层中有了对IMailMessage的引用,就可以将其发送到SMTP代码,而不是像我一样只调用send()。出于您的目的,您可能需要进一步充实iMail Message接口,以便访问MvcMailMessage类的其他部分。我想知道您是否可以提供一些关于如何实现MVCMailer的信息?
public class UserCreationService : IUserCreationService
{
private readonly IUserRepository _repository;
private readonly IUserMailer _userMailer;
public UserCreationService(IUserRepository repository, IUserMailer userMailer)
{
_repository = repository;
_userMailer = userMailer;
}
public void CreateNewUser(string name, string email, string password)
{
// Create the user's account
_repository.Add(new User { Name = name, Email = email, Password = password });
_repository.SaveChanges();
// Now send a welcome email to the user
_userMailer.Welcome(new WelcomeMailModel { Name = name, To = email }).Send();
}
}