我有一些代码会在发生事件时通过电子邮件向我发送通知。现在我正在尝试添加一个页面, ALSO 删除对电子邮件的依赖。
供参考;我将要发送的通知的名称存储为数据库中的字符串。在运行时,我有一个人员列表和一个他们想要接收的字符串表示。
我最初认为使用ninject进行依赖注入,但是内核绑定变得很大,而且看起来我在一起攻击它。
然后我认为简单的工厂,Activator.CreateInstance(Email / Page)作为INotifcation,但我不知道如何处理不同的构造函数参数(除非我使用一个常见的复杂属性,如Employee,它具有所有我需要的信息。)
到目前为止,我有这样的事情:
public interface INotification
{
void SendMessage();
}
public class Email: INotification
{
private readonly string _toEmailAddress;
private string Body
{
get
{
return "Email";
}
}
private static string SmtpHost
{
get
{
return ConfigurationManager.AppSettings["SmtpHost"];
}
}
public Email( string toEmailAddress)
{
_toEmailAddress = toEmailAddress;
}
public void SendMessage()
{
var requestEmail = new MailMessage
{
From = new MailAddress(FromEmailAddress, FromDisplayName),
};
requestEmail.To.Add(new MailAddress(_toEmailAddress));
var smtp = new SmtpClient { Host = SmtpHost };
smtp.Send(requestEmail);
}
}
public class Page : INotification
{
private string ToPagerNumber;
public Page(string toPagerNumber)
{
ToPagerNumber = toPagerNumber;
}
private static string IpAddress
{
get
{
var host = new IPHostEntry();
return host.AddressList.Where(a => a.AddressFamily == AddressFamily.InterNetwork).ToString();
}
}
public void SendMessage()
{
var pageProxy = new Pager();
var serviceResult = pageProxy.SendPage(ToPagerNumber, "Test", true, IpAddress);
}
我当然感谢所有的反馈。我觉得我可以多次完成这项任务,但找到完美的解决方案(虽然我认为可能没有一个)已证明是繁重的。
谢谢大家!