我正在将NEventStore添加到现有项目中,并且正在使用DI。
我想将CommonDomain.Persistence.EventStore.IRepository
实例注入(inject)到我的MVC Controller 中。此接口(interface)的The only implementation是EventStoreRepository
。
此类取决于IConstructAggregates
,而only implementation I find是AggregateFactory
,被标记为内部,位于测试项目中,并且具有非常奇怪的文件名。
我不应该使用IRepository
吗? (为什么将其标记为公共(public)的,而未被任何内部代码使用?)
我正在查看用于处理聚合的示例项目here和IRepository
。
还是我应该自己实现IConstructAggregates
?
最佳答案
我在同一个事情上挣扎,我认为简短的答案是:
如果您不使用快照,则测试项目中的实现会很好。实际上,如果获得快照,我会添加一些代码以引发异常。
如果您使用快照,则必须使用一种类似于此处描述的快照末尾的方法:http://williamverdolini.github.io/2014/08/20/cqrses-neventstore-snapshots/
从本质上讲,问题是从IConstructAggregates返回的对象将在上重播事件流,从中传递的快照之后的版本开始。
只是一个猜测,但我认为可能未在CommonDomain中“正式”实现的原因是:GetSnapshot()
,并且您想要构建一个IConstructAggregates
实现,该实现可以某种方式重新混合这些聚合(也许是ISupportSnapshots
接口(interface)?)Activator.CreateInstance<T>()
。
看起来这段代码片段使用与测试项目中的AggregateFactory
相同的逻辑:
-http://pastebin.com/cFESMiTz