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

时间:2014-11-10 00:10:54

标签: c# dependency-injection event-sourcing object-composition neventstore

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

我希望将一个CommonDomain.Persistence.EventStore.IRepository实例注入我的MVC控制器。此界面的The only implementationEventStoreRepository 此类取决于IConstructAggregatesonly implementation I findAggregateFactory,标记为内部,位于测试项目中,文件名非常奇怪。

我不应该使用IRepository吗? (为什么它被标记为公开而不被任何内部代码消耗?)
我正在查看用于操作聚合的示例项目hereIRepository

或者我应该自己实施IConstructAggregates

1 个答案:

答案 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