1

问题:用户对域中的某个实体进行操作。最后一个更改其状态,以便用户重复接收e-mail notifications(使用 smtp 服务器)直到给定时间。
所以我需要以某种方式触发一个事件。

有哪些替代方法可以做到这一点?我知道ASP.NET MVC框架中没有事件。

谢谢!

4

1 回答 1

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 安装:

  1. 使用包管理器控制台:install-package griffin.container.mvc3
  2. 请按照以下说明操作:http: //griffinframework.net/docs/container/mvc3/
于 2012-08-27T08:56:29.687 回答