asp.net-mvc - 从业务层使用邮政库

标签 asp.net-mvc asp.net-mvc-3 email controller postal

我有一个使用 ASP.NET MVC3 构建的网站,其分层如下:

  • ProjectName.Shared(模型+服务契约(Contract))
  • 项目名称.基础设施
  • 项目名称.数据
  • 项目名称.Data.Sql
  • ProjectName.Managers(业务层)
  • ProjectName.Services(WCF 服务)
  • ProjectName.UI.Main(ASP.NET MVC3 应用程序)

  • 这实际上是我最近经过一些重构后提出的结构。不幸的是,UI 和我的业务层之间没有完全分离,所以这个领域可以使用更多的重构——我现在不能这样做,因为我的截止日期很紧。

    就目前而言,我的客户要求一些新功能,包括在某些事件发生后向用户发送电子邮件。该网站目前发送电子邮件的方式是使用 Postal到目前为止做得很好的图书馆。这发生在 MVC Web 应用程序中,这与我对新功能的情况不同......

    问题:

    我有一种情况,我需要在我的业务层中使用私有(private)方法来向用户发送电子邮件。我不能在 Action 方法中执行此操作的原因是因为有许多代码路径最终会调用此私有(private)方法。因此,它并不是真正特定于一种 Action 方法。

    建议的解决方案:

    我的想法是创建一个 电子邮件 Controller 我可以通过我的业务层中的 HTTP-POST 调用来调用它的方法。然后,我将通过 Action 方法的参数传递发送电子邮件所需的参数。

    但我确实发现这个解决方案有点缺陷和hacky。所以我真的很想听听一些关于如何解决这个问题的想法。

    最佳答案

    您能否不只是将您的电子邮件逻辑包装在服务层或基础架构或其他任何东西后面并从 Controller 调用它,然后通过您的构造函数注入(inject)服务?
    您对业务层执行相同的操作。除非邮政对象需要继承到 asp.net 的东西?

    namespace ProjectName.Infrastructure
    {
        public interface IEmailService
        {
            void SendEmail(string address, string content)
            {
            }
        }
    
        public class EmailService : IEmailService
        {
            private void SendEmail(string address, string content)
            {
                //...send email via Postal
            }
        }
    }
    
    public class ControllerA
    {
        private IEmailService emailService;
    
        public ControllerA()
        {
            emailService = new EmailService();
        }
    
        public ActionResult SendEmail(ViewModel model)
        {
            emailService.SendEmail(model.address, model.content);
        }
    }
    

    关于asp.net-mvc - 从业务层使用邮政库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9148745/

    相关文章:

    javascript - 谷歌地图无法读取未定义的属性 'maps'

    javascript - 返回 PartialView 时在脚本内使用 TempData

    asp.net-mvc - MVC ASP.NET 或 Razor

    asp.net-mvc-3 - 在查询字符串中使用 “popup=1”时找不到mini-profiler结果

    .net - powershell 或 net 发送带有身份验证的电子邮件

    PHPUnit 电子邮件测试

    javascript - 如何在 Url.Action() 中传递多个参数

    c# - 如何在表单中呈现列表项?

    c# - 网页上的嵌套 foreach 循环

    email - php 邮件未发送到电子邮件