域对象不应该有任何依赖,因此也没有依赖注入(inject)。但是,当从域对象中调度域事件时,我可能希望使用集中式 EventDispatcher
.我怎么能弄到一个?
我不想将事件列表返回给调用者,因为我希望它们保持不透明并保证它们的调度。这些事件只能由需要强制执行最终一致约束的其他域对象和服务使用。
最佳答案
见 Udi Dahan's domain events
基本上,您为域事件注册一个或多个处理程序,然后引发如下事件:
public class Customer { public void DoSomething() { DomainEvents.Raise(new CustomerBecamePreferred() { Customer = this }); } }
并且所有注册的处理程序都将被执行:
public void DoSomethingShouldMakeCustomerPreferred() { var c = new Customer(); Customer preferred = null; DomainEvents.Register<CustomerBecamePreferred>(p => preferred = p.Customer); c.DoSomething(); Assert(preferred == c && c.IsPreferred); }
这基本上是在执行好莱坞原则 (不要调用我们,我们会调用您),因为您不直接调用事件处理程序 - 而是在引发事件时执行事件处理程序。
关于dependency-injection - 如何从域对象内分派(dispatch)域事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52992492/