我将NEventStore添加到我现有的项目中,并且我正在使用DI。
我希望将一个CommonDomain.Persistence.EventStore.IRepository
实例注入我的MVC控制器。此界面的The only implementation为EventStoreRepository
此类取决于IConstructAggregates
,only implementation I find为AggregateFactory
,标记为内部,位于测试项目中,文件名非常奇怪。
我不应该使用IRepository
吗? (为什么它被标记为公开而不被任何内部代码消耗?)
我正在查看用于操作聚合的示例项目here和IRepository
。
或者我应该自己实施IConstructAggregates
?
答案 0 :(得分: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