- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 MVC 项目中使用 Ninject,并尝试按照 Udi Dahan 的模式 http://www.udidahan.com/2009/06/14/domain-events-salvation/ 实现领域事件
在下面的摘录中,“容器”用于解析已引发的特定类型事件的所有事件处理程序。
我的问题(如果我遗漏了一些基本的东西,抱歉)是如何使用 Ninject 做到这一点?换句话说:
如何在这个静态类中设置“Container”?
一旦我有了容器(内核?),解析所有事件处理程序的 Ninject 语法是什么(我假设我必须事先在服务模块中注册)?
我一直在帖子中读到,只应该使用构造函数注入(inject),所有的事情都可以递归地解决,并且访问 Ninject 内核是禁忌。因此,任何有关如何执行此操作的建议将不胜感激。
文章摘录
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);
}
}
最佳答案
How does the "Container" get set in this static class?
您必须在应用程序启动期间设置它:
DomainEvents.Container = kernel;
what would be the Ninject syntax to resolve all the event handlers:
你可以这样做,例如:
Container.Get<IEnumerable<Handles<T>>>())
Udi 的静态 DomainEvents
类是环境上下文反模式的实现(参见DI PP&P章节5.3)。在这种情况下,我宁愿使用依赖项注入(inject)将 IDomainEvents
抽象注入(inject)到需要它的代码中,而不是让代码依赖于静态实例。
然而,问题是您的域对象需要依赖于IDomainEvents
,并且构造函数注入(inject)(可能)是不可能的。在这种情况下,技巧是使用方法注入(inject)。
换句话说,使用构造函数注入(inject)将 IDomainEvents
注入(inject)命令处理程序或服务(或者您所说的使用域对象上的方法的业务逻辑),并将该依赖项传递到调用需要域对象的方法时(方法注入(inject))。
关于asp.net-mvc - 将 Ninject 与 Udi Dahan 的领域事件结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13015486/
我正在 MVC 项目中使用 Ninject,并尝试按照 Udi Dahan 的模式 http://www.udidahan.com/2009/06/14/domain-events-salvation
我是一名优秀的程序员,十分优秀!