我有一个Mvc3-Project,我想注册自定义事件挂钩。
这样我就可以注册“用户登录”等活动。我不想在控制器中执行它,因为在其他项目中有一个业务逻辑。
所以在我的Mvc3-Project中,我想编写一些类,这些类将具有在用户启用时必须执行的代码。但是如何将这些类(或它们的实例)注册到事件中。使用反射搜索从特殊基类继承的所有类是一个好主意,还是有其他更聪明的方法?
所以再一次,我不想监视被调用的动作,我希望业务逻辑触发我的Mvc3-Project中的一些类。
答案 0 :(得分:0)
修改强>
正如Chris在下面的评论中指出的那样,MVC3是无状态的,这意味着使用此解决方案,您将不得不在每个请求上重新订阅这些事件。对于MVC来说,这可能不是一个很好的解决方案。
您是否考虑过全球活动服务?
粗略的例子:
class Example : IEventReceiver
{
public void Init()
{
EventService.Subscribe("Logon", this);
}
private void OnEvent(string eventName)
{
// Do logon stuff here.
}
}
您需要创建EventService
类,它可能是单例或服务。它可能具有类似于以下内容的界面:
public interface IEventService
{
void Subscribe(string eventName, IEventReceiver receiver);
void Unsubscribe(string eventName, IEventReceiver receiver);
void DispatchEvent(string eventName);
}
public interface IEventReceiver
{
void OnEvent(string eventName);
}