Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于DI的NEventStore组件的对象组成_C#_Dependency Injection_Event Sourcing_Object Composition_Neventstore - Fatal编程技术网

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

C# 用于DI的NEventStore组件的对象组成,c#,dependency-injection,event-sourcing,object-composition,neventstore,C#,Dependency Injection,Event Sourcing,Object Composition,Neventstore,我正在将NEventStore添加到我现有的项目中,并使用DI 我想将CommonDomain.Persistence.EventStore.IRepository的实例注入我的MVC控制器。此界面的名称为EventStoreRepository 该类依赖于IConstructAggregates和isAggregateFactory,它标记为内部,位于测试项目中,具有非常奇怪的文件名 我不应该使用IRepository?(为什么它被标记为公共代码而不被任何内部代码使用? 我正在查看用于处理聚合

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

我想将
CommonDomain.Persistence.EventStore.IRepository的实例注入我的MVC控制器。此界面的名称为
EventStoreRepository

该类依赖于
IConstructAggregates
和is
AggregateFactory
,它标记为内部,位于测试项目中,具有非常奇怪的文件名

我不应该使用
IRepository
?(为什么它被标记为公共代码而不被任何内部代码使用?
我正在查看用于处理聚合的示例项目和
IRepository


或者我应该自己实现
IConstructAggregates
吗?

我也在努力解决同样的问题,我认为简单的答案是:

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

如果您使用的是快照,则必须使用类似于本文末尾所述方法的方法:

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

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

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

  • 您可能希望使用DI容器来构建聚合,而不仅仅是
    Activator.CreateInstance()

看起来这里的代码片段使用的逻辑与测试项目中的
AggregateFactory
相同:
-

我想我已经找到了这个类不被公开支持的原因:它似乎不完整,也没有经过适当的测试。我在这个存储库中遇到了一系列问题,并且已经提交了一份错误报告:没有,没有快照,但是我想我无论如何都必须避免使用这个类,因为我在使用它时遇到了一些重大问题-(我想我最终会使用geteventstore.com之类的东西,并使用CommonDomain项目的修改版本。我发现有一些东西需要进行一些调整,以适应我的情况。是的,我们决定在新项目的生产中不使用NEventStore。不幸的是,问题太多了-(您是否考虑过使用类似于:?它看起来比CommonDomain经过深思熟虑更好。