asp.net-mvc – 将Ninject与Udi Dahan的域事件一起使用
我在一个MVC项目中使用Ninject,并且正在尝试按照Udi Dahan的模式
http://www.udidahan.com/2009/06/14/domain-events-salvation/实现域事件
在下面的摘录中,“Container”用于解析已引发的特定事件类型的所有事件处理程序. 我的问题(如果我遗漏了一些基本内容,请道歉)是如何使用Ninject做到这一点的?换一种说法: >如何在此静态类中设置“容器”? 我一直在阅读帖子,只应该使用构造函数注入,并且从那里递归地解决所有内容,并且访问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); } } 解决方法
您必须在应用程序启动期间设置它: DomainEvents.Container = kernel;
你可以像这样做,例如: Container.Get<IEnumerable<Handles<T>>>()) Udi的静态DomainEvents类是Ambient Context反模式的实现(参见DI PP&P章5.3).在这种情况下,我宁愿使用依赖注入将IDomainEvents抽象注入到需要它的代码中,而不是让代码依赖于静态实例. 但问题是你的域对象需要依赖IDomainEvents,并且(可能)不可能进行构造函数注入.诀窍是在这种情况下使用方法注入. 换句话说,使用构造函数注入将IDomainEvents注入命令处理程序或服务(或者您使用域对象上的方法调用业务逻辑),并在调用需要它的方法时将该依赖项传递给域对象(方法注入). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何在MVC的耗时操作中使用AsyncController
- asp.net-mvc – 使用ASP.NET MVC测试驱动的开发 – 从哪里开
- asp.net-mvc – ASP.NET MVC:在视图上访问ViewModel属性
- asp.net neatUpload 支持大文件上传组件
- 关于Asp.net的cookie的细节点1
- ASP.NET MVC注定要取代Webforms吗?
- 在asp.net发送简讯到大约10000封电子邮件
- asp.net-mvc – 使用TFS 2015 Build构建和部署Web应用程序
- 可能在ASP.Net页面中引发404错误?
- asp.net-mvc-3 – 我怎么能用CheckBoxFor使用int?