问题:用户对域中的某个实体进行操作。最后一个更改其状态,以便用户重复接收e-mail notifications
(使用 smtp 服务器)直到给定时间。
所以我需要以某种方式触发一个事件。
有哪些替代方法可以做到这一点?我知道ASP.NET MVC
框架中没有事件。
谢谢!
问题:用户对域中的某个实体进行操作。最后一个更改其状态,以便用户重复接收e-mail notifications
(使用 smtp 服务器)直到给定时间。
所以我需要以某种方式触发一个事件。
有哪些替代方法可以做到这一点?我知道ASP.NET MVC
框架中没有事件。
谢谢!
您可以使用我的 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