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

我想将CommonDomain.Persistence.EventStore.IRepository实例注入(inject)到我的MVC Controller 中。此接口(interface)的The only implementationEventStoreRepository
此类取决于IConstructAggregates,而only implementation I findAggregateFactory,被标记为内部,位于测试项目中,并且具有非常奇怪的文件名。

我不应该使用IRepository吗? (为什么将其标记为公共(public)的,而未被任何内部代码使用?)
我正在查看用于处理聚合的示例项目hereIRepository

还是我应该自己实现IConstructAggregates

最佳答案

我在同一个事情上挣扎,我认为简短的答案是:

如果您不使用快照,则测试项目中的实现会很好。实际上,如果获得快照,我会添加一些代码以引发异常。

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

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

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

  • 如果您具有支持快照的聚合,则无论如何都必须在其上实现GetSnapshot(),并且您想要构建一个IConstructAggregates实现,该实现可以某种方式重新混合这些聚合(也许是ISupportSnapshots接口(interface)?)
  • 您可能想使用DI容器来构建聚合,而不仅仅是Activator.CreateInstance<T>()

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

    09-19 08:38