c# – 没有服务定位器的域事件
发布时间:2020-12-15 08:21:41 所属栏目:百科 来源:网络整理
导读:提供域事件的默认实现: 表示域事件的接口: public interface IDomainEvent { } 表示通用域事件处理程序的接口: public interface IEventHandlerT where T : IDomainEvent 筹集新活动的中央接入点: public static class DomainEvents{ public static void
提供域事件的默认实现:
表示域事件的接口: public interface IDomainEvent { } 表示通用域事件处理程序的接口: public interface IEventHandler<T> where T : IDomainEvent 筹集新活动的中央接入点: public static class DomainEvents { public static void Raise<T>(T event) where T : IDomainEvent { //Factory is a IoC container like Ninject. (Service Location/Bad thing) var eventHandlers = Factory.GetAll<IEventHandler<T>>(); foreach (var handler in eventHandlers ) { handler.Handle(event); } } } 消费: public class SaleCanceled : IDomainEvent { private readonly Sale sale; public SaleCanceled(Sale sale) { this.sale = sale; } public Sale Sale { get{ return sale; } } } 提升活动的服务: public class SalesService { public void CancelSale(int saleId) { // do cancel operation // creates an instance of SaleCanceled event // raises the event DomainEvents.Raise(instanceOfSaleCanceledEvent); } } 是否有另一种方法可以在不使用服务位置反模式的情况下使用域事件? 解决方法
我想在你的情况下,你真的不需要.使用依赖注入,您可以将IDomainEventDispatcher实现注入到您的服务中.
我之所以认为像这样的单身人士已经成为主流,它是一些着名开发人员首先提出的实现之一,起初并不觉得太错误.另一个原因是可能需要从域内引发事件: public class Customer { public void Enable() { _enabled = true; DomainEvents.Raise(new CustomerEnabledEvent(_id)); } } 在某些阶段,Jan Kronquist发现了这篇文章:http://www.jayway.com/2013/06/20/dont-publish-domain-events-return-them/ 这是我第三次将这个链接添加到我的答案中,因为我必须赞扬这一点以改变我的想法.但是,我想我现在就不再这样做了.对不起Jan (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- mave的依赖范围
- c# – Internals,InternalsVisibleTo和测试共享行为
- vb.net 教程 3-5 窗体编程 对话框3 ColorDialog & Font
- ruby-on-rails – 在Ruby on Rails的IRB上停止加载脚本执行
- ajax请求json格式的数据,在经过interceptor时出现JSONExce
- C何时分配和释放内存 – 在函数调用之前,在函数调用之后……
- Flex中的fx、mx和s命名空间
- 用于CSV :: open#<<的Ruby未定义方法`map'(NoMeth
- 仅当表存在时才从中删除SQLite
- oracle左外连接、右外连接、完全外连接以及(+)号用法