ASP.NET MVC中的计时器事件

时间:2012-08-27 08:49:37

标签: asp.net-mvc events

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

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

谢谢!

1 个答案:

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

  1. 使用包管理器控制台:install-package griffin.container.mvc3
  2. 请按照以下说明操作:http://griffinframework.net/docs/container/mvc3/