Asp.net mvc 从业务层使用邮政图书馆
我有一个使用ASP.NET MVC3构建的网站,其分层如下:Asp.net mvc 从业务层使用邮政图书馆,asp.net-mvc,asp.net-mvc-3,email,controller,postal,Asp.net Mvc,Asp.net Mvc 3,Email,Controller,Postal,我有一个使用ASP.NET MVC3构建的网站,其分层如下: ProjectName.Shared(模型+服务合同) 项目名称.基础设施 ProjectName.Data ProjectName.Data.Sql ProjectName.Managers(业务层) ProjectName.Services(WCF服务) ProjectName.UI.Main(ASP.NET MVC3应用程序) 这实际上是我最近经过一些重构后提出的结构。不幸的是,UI和我的业务层之间没有完全分离,因此这个领域
- ProjectName.Shared(模型+服务合同)
- 项目名称.基础设施
- ProjectName.Data
- ProjectName.Data.Sql
- ProjectName.Managers(业务层)
- ProjectName.Services(WCF服务)
- ProjectName.UI.Main(ASP.NET MVC3应用程序)
但我确实发现这个解决方案有点缺陷和不成熟。所以我真的很想听听关于如何解决这个问题的一些想法。你能不能把你的电子邮件逻辑包装在服务层或基础设施或其他什么东西后面,从控制器调用它,然后通过构造器注入服务? 对业务层也可以这样做。除非postal对象需要继承到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.NETMVC的Postal之前所拥有的。它允许您将HTML电子邮件创建为ASP.NET MVC视图,这些视图绑定到从控制器的操作方法发送的@Model对象。Postal直接依赖于MVC视图和用于生成电子邮件的razor引擎这一事实是这里的一个大问题。我也面临着这个问题,很想知道是否有更好的方法。我知道这已经有一年了,但Postal会像内置的Razor视图引擎一样使用RazorEngine(),如下所述: