加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:39:45 所属栏目:asp.Net 来源:网络整理
导读:我有一个使用ASP.NET MVC3构建的网站,其分层如下: ProjectName.Shared(模型服务合同) ProjectName.Infrastructure ProjectName.Data ProjectName.Data.Sql ProjectName.Managers(业务层) ProjectName.Services(WCF服务) ProjectName.UI.Main(ASP.NET MVC3应
我有一个使用ASP.NET MVC3构建的网站,其分层如下:

> ProjectName.Shared(模型服务合同)
> ProjectName.Infrastructure
> ProjectName.Data
> ProjectName.Data.Sql
> ProjectName.Managers(业务层)
> ProjectName.Services(WCF服务)
> ProjectName.UI.Main(ASP.NET MVC3应用程序)

这实际上是我最近在重构之后想出的结构.不幸的是,UI和我的业务层之间没有完全分离,因此这个领域可能会使用更多的重构 – 我现在无法做到这一点,因为我的时间紧迫.

至于现在,我的客户已经请求了一些新功能,包括在发生某些事件后向用户发送电子邮件.网站目前发送电子邮件的方式是使用Postal库,这是迄今为止做得很好的.这发生在MVC Web应用程序中,这与我对新功能的情况不同…

问题:

我有这样的情况,我需要让我的业务层内的私人方法向用户发送电子邮件.我之所以无法在Action方法中执行此操作,是因为有许多代码路径最终会调用此私有方法.所以它并不是特定于一个Action方法.

建议的解决方案:

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

但我觉得这个解决方案有点瑕疵和黑客.所以我真的想听听一些关于如何解决这个问题的想法.

解决方法

你能不能将你的电子邮件逻辑包装在服务层或基础设施之后,或者从控制器调用它,并通过你的构造函数注入服务?
您对业务层执行相同操作.除非邮政对象需要继承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);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读