【发布时间】:2012-10-22 16:16:07
【问题描述】:
我在 MVC 项目中使用 Ninject,并尝试按照 Udi Dahan 的模式 http://www.udidahan.com/2009/06/14/domain-events-salvation/ 实现域事件
在下面的摘录中,“容器”用于解析已引发的特定类型事件的所有事件处理程序。
我的问题(如果我遗漏了一些基本的东西,请道歉)是如何使用 Ninject 做到这一点?换句话说:
如何在这个静态类中设置“Container”?
一旦我有了一个容器(内核?),解决所有事件处理程序的 Ninject 语法是什么(我假设我必须事先在服务模块中注册)?
我一直在帖子中阅读,应该只使用构造函数注入,并且一切都将从中递归解决,并且访问 Ninject Kernel 是一个禁忌。因此,任何有关如何执行此操作的建议都将不胜感激。
文章摘录
public static class DomainEvents
{
[ThreadStatic] //so that each thread has its own callbacks
private static List<Delegate> actions;
public static IContainer Container { get; set; } //as before
//Registers a callback for the given domain event
public static void Register<T>(Action<T> callback) where T : IDomainEvent
{
if (actions == null)
actions = new List<Delegate>();
actions.Add(callback);
}
//Clears callbacks passed to Register on the current thread
public static void ClearCallbacks ()
{
actions = null;
}
//Raises the given domain event
public static void Raise<T>(T args) where T : IDomainEvent
{
if (Container != null)
foreach(var handler in Container.ResolveAll<Handles<T>>())
handler.Handle(args);
if (actions != null)
foreach (var action in actions)
if (action is Action<T>)
((Action<T>)action)(args);
}
}
【问题讨论】:
-
stackoverflow.com/questions/10444646/…也有类似的问题,但是答案没有给出代码示例,所以我还是不清楚怎么做。
标签: asp.net-mvc dependency-injection inversion-of-control ninject domain-events