Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不破坏我的服务层的情况下使用MVCMailer?_C#_Asp.net Mvc_Asp.net Mvc 3_Mvcmailer - Fatal编程技术网

C# 如何在不破坏我的服务层的情况下使用MVCMailer?

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

我正在研究使用电子邮件来制作更好的电子邮件

然而,我不确定的一件事是如何组织代码。我目前有2个项目。一个用于mvc,一个用于我的回购和服务层

我的第二个项目没有MVC的知识,我希望保持这种方式

我想我的smtp代码会进入服务层或包装器,然后当我需要发送电子邮件时,我会从其他服务层调用它


那么MVC邮件程序在哪里合适呢?我是否在控制器中生成正文,然后将其传递给服务层,再将其传递给我的smtp类?

MVCMailer似乎已经支持发送电子邮件。如果您正确设置配置,它应该能够通过电子邮件发送已填充的MailerViews,而无需额外实现

我不确定您的第二个项目在解决方案中的作用,但有两种可能性:

  • 可能不实用。。。等待 对于带有“电子邮件发送”的版本 “从后台进程”

  • 忘记第二个项目中的Smtp 使用Http只需调用一个视图 这又称为MVCMailer


  • 我的解决方案是在服务层中构建接口,然后我的服务可以使用这些接口来获取邮件消息,而创建消息的实现继续驻留在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();
        }
    }