6

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

我想将一个实例CommonDomain.Persistence.EventStore.IRepository注入到我的 MVC 控制器中。该接口的唯一实现EventStoreRepository.
这个类取决于IConstructAggregates并且我发现的唯一实现AggregateFactory是标记为内部的,位于测试项目中并且具有非常奇怪的文件名。

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

还是我应该自己实施IConstructAggregates

4

1 回答 1

3

我正在为同样的事情苦苦挣扎,我认为简短的回答是:

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

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

本质上,问题在于您将从 IConstructAggregates 返回的对象将在其上重播事件流,该事件流从传入的快照之后的版本开始

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

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

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

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

于 2014-11-22T00:46:42.453 回答