用于DI的NEventStore组件的对象组成

tra*_*max 6 c# dependency-injection object-composition event-sourcing neventstore

我正在将NEventStore添加到我现有的项目中,而我正在使用DI.

我想要一个CommonDomain.Persistence.EventStore.IRepository注入我的MVC控制器的实例.这个接口的唯一实现EventStoreRepository.
这个类依赖于IConstructAggregates我发现唯一实现AggregateFactory被标记为内部的,位于测试项目,具有非常古怪的文件名.

我不应该使用IRepository?(为什么它被标记为公共而不被任何内部代码消耗?)
我在这里查看示例项目并IRepository用于操作聚合.

或者我应该自己实施IConstructAggregates

小智 3

我正在为同样的事情而苦苦挣扎,我认为简短的答案是:

如果您不使用快照,测试项目中的实现将会正常工作。事实上,如果您获得了快照,我会添加一些代码来引发异常。

如果您使用快照,则必须使用类似于此处描述的方法末尾的方法:http ://williamverdolini.github.io/2014/08/20/cqrses-neventstore-snapshots/

本质上,问题在于您从 IConstructAggregates 返回的对象将从紧随传入的快照之后的版本开始重播事件流。

只是猜测,但我认为这可能没有在 CommonDomain 中“正式”实现的原因是:

  • 如果您有支持快照的聚合,那么GetSnapshot()无论如何您都必须在它们上实现,并且您希望构建一个IConstructAggregates可以以某种方式重新水合这些聚合的实现(也许是一个ISupportSnapshots接口?)

  • 您可能希望使用 DI 容器来构建聚合,而不仅仅是Activator.CreateInstance<T>().

看起来这里的代码片段使用与AggregateFactory测试项目相同的逻辑:-http: //pastebin.com/cFESMiTz