问题:用户在域中的某个实体上运行。最后一个更改其状态,以便用户重复接收e-mail notifications
(使用smtp服务器),直到给定时间。
所以我需要以某种方式发射一个事件。
有哪些替代方法可以做到这一点?我知道ASP.NET MVC
框架中没有事件。
谢谢!
答案 0 :(得分:1)
您可以使用内置支持进程内域事件的Inversion Of Control容器:
<强>订阅强>
订阅很简单。只需让任何类实现IHandlerOf:
[Component]
public class ReplyEmailNotification : IHandlerOf<ReplyPosted>
{
ISmtpClient _client;
IUserQueries _userQueries;
public ReplyEmailNotification(ISmtpClient client, IUserQueries userQueries)
{
_client = client;
_userQueries = userQueries;
}
public void Invoke(ReplyPosted e)
{
var user = _userQueries.Get(e.PosterId);
_client.Send(new MailMessage(user.Email, "bla bla"));
}
}
<强>调度强>
使用DomainEvent类调度域事件。实际的域事件可以是任何类,没有任何限制。但我建议您将它们视为DTO。
public class UserCreated
{
public UserCreated(string id, string displayName)
{
}
}
public class UserService
{
public void Create(string displayName)
{
//create user
// [...]
// fire the event.
DomainEvent.Publish(new UserCreated(user.Id, user.DisplayName));
}
}
代码来自我的文章:http://www.codeproject.com/Articles/440665/Having-fun-with-Griffin-Container
ASP.NET MVC3安装:
install-package griffin.container.mvc3