对象DI的NEventStore组件的组成

本文关键字:组件 NEventStore DI 对象 | 更新日期: 2023-09-27 18:29:44

我正在将NEventStore添加到我现有的项目中,并且我正在使用DI。

我希望将CommonDomain.Persistence.EventStore.IRepository的实例注入到我的MVC控制器中。该接口的唯一实现是EventStoreRepository
这个类依赖于IConstructAggregates,我找到的唯一实现是AggregateFactory,它被标记为内部,位于测试项目中,文件名非常奇怪。

我不应该使用IRepository吗?(为什么它被标记为公共,而不被任何内部代码使用?)
我在这里查看示例项目和用于操纵聚合的IRepository

还是我应该自己实现IConstructAggregates

对象DI的NEventStore组件的组成

我也在为同样的事情而挣扎,我认为简单的答案是:

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

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

本质上,问题是从IConstructAggregate返回的对象将在其上重播事件流,该事件流从中传递的快照之后的版本开始。

只是猜测,但我认为这可能不会在CommonDomain中"正式"实现的原因是:

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

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

这里的这段代码似乎使用了与测试项目中的AggregateFactory相同的逻辑:-http://pastebin.com/cFESMiTz