c# - 向我的应用程序添加服务层

标签 c# asp.net-mvc asp.net-mvc-3 entity-framework

目前,我有一个 Controller 方法,其中包含一个 try/catch 语句,用于发送循环遍历数据库列表的电子邮件:

try
            {
                // MailSender object declaration
                MailSender objMail = new MailSender();

                // Set SMTP server address
                objMail.Host = "smtp.test.com";

                // Sender's address
                objMail.From = "test@test.com";

                // Subject
                objMail.Subject = surveyprogrammodel.Subject;

                // HTML format?
                objMail.IsHTML = true;

                //Send to Mail Queue
                objMail.Queue = true;
                objMail.QueuePath = Server.MapPath("~\\MailQueue\\");

                     foreach (var item in EmailList)
                        {

                            //  Create dynamic link to the take the Survey
                            var SurveyLink = strUrl + UrlContent + "SurveyResponse/Create?MemberId=" + item.PersonModels.MemberId + "&ProgramId=" + item.ProgramId;

                            // Recipient's address
                            objMail.AddAddress(item.PersonModels.Email);

                            // Body
                            objMail.Body = surveyprogrammodel.Body + "<br /><br />Please take the survey using the link below:<br /><br /><a href=\"" + SurveyLink + "\">" + SurveyLink + "<a/>";

                            // Send message
                            objMail.Send();

                            objMail.ResetAddresses();
                        }
                    }

                    catch (Exception ex)
                    {
                        Response.Write("An error occurred: <font color=red>"+ ex.Message + "</font>");
                    }

我想知道如何将此语句分解为一种服务,以便在需要时可以轻松交换邮件程序实现。是否有一个很好的例子可以解释实现这一目标的最佳方法?

最佳答案

在最简单、不复杂的示例中,您可以简单地创建一个接口(interface)。

interface IEmailer
{
    void Send(List<Email> email);
}

class SimpleMailer : IEmailer
{
    void Send(List<Email> email)
    {
        //do work
    }
}

class ComplexMailer : IEmailer
{
    void Send(List<Email> email)
    {
        //do work
    }
}

用法

IEmailer mailer = new SimpleMailer();

实现变更

IEmailer mailer = new ComplexMailer();

然后,如果您想要查找样式实现,您可以实现服务定位器模式/使用 DI 框架(StructureMap、Ninject 等)。 MSDN 上有一个示例 here .

关于c# - 向我的应用程序添加服务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11743760/

相关文章:

asp.net - 如何防止 ?Area= 添加到生成的 URL 中

c# - 另一个无法加载文件或程序集'EntityFramework

c# - 如何在 c#.net 中制作来电显示

c# - 在 EF core 中,在一个类中添加实体后,如何在不调用 SaveChanges() 的情况下从不同的类访问该实体?

asp.net-mvc - 从另一个 View 渲染部分 View (使用 Controller 操作)

javascript - 单元测试 MVC3 客户端功能

jquery - 更改用于验证的 jQuery 自定义样式,使其显示为工具提示

c# - 如何在 ASP.NET 中运行后台任务

c# - 如何在按钮单击事件的模态弹出扩展程序中的 iframe 中加载页面?

Azure 中的 ASP.NET Core 2.0 URL 重写