6

Ich füge NEventStore zu meinem bestehenden Projekt hinzu und verwende DI.Objektzusammenstellung von NEventStore-Komponenten für DI

Ich möchte eine Instanz von CommonDomain.Persistence.EventStore.IRepository in meine MVC-Controller injiziert haben. The only implementation dieser Schnittstelle ist EventStoreRepository.
Diese Klasse ist abhängig von IConstructAggregates und die only implementation I find ist AggregateFactory, die als intern markiert ist, befindet sich im Test-Projekt und hat sehr seltsame Dateinamen.

Soll ich nicht IRepository verwenden? (Warum wird es als öffentlich markiert und nicht von einem der internen Code verbraucht?)
Ich bin auf der Suche nach Beispielprojekt here und IRepository für die Manipulation der Aggregate verwendet.

Oder sollte ich selbst IConstructAggregates implementieren?

Antwort

3

ich mit der gleichen Sache bin zu kämpfen, ich denke, die kurze Antwort ist:

Wenn Sie nicht Snapshots, die Umsetzung in dem Testprojekt Fein funktionieren würde. Tatsächlich würde ich Code hinzufügen, um eine Ausnahme auszulösen, wenn Sie einen Snapshot erhalten.

Wenn Sie Schnappschüsse verwenden, würden Sie einen Ansatz ähnlich dem am Ende des hier beschriebenen verwenden müssen: http://williamverdolini.github.io/2014/08/20/cqrses-neventstore-snapshots/

Im Wesentlichen ist das Problem, dass das Objekt, das Sie von zurückgeben würde In IConstructAggregates wird der Ereignisstrom erneut abgespielt, und zwar , beginnend mit der Version unmittelbar nach dem Snapshot, der in übergeben wurde.

Nur eine Vermutung, aber ich denke, der Grund, warum dies nicht „offiziell“ in CommonDomain implementiert sein kann, ist:

  • Wenn Sie Aggregate, die Snapshots unterstützen, müssen Sie ohnehin implementieren GetSnapshot() auf sie, und Sie würden gerne einen IConstructAggregates Implementierung erstellen, die diese Aggregate-Hydrat wieder irgendwie kann (vielleicht eine ISupportSnapshots Schnittstelle?)

  • Es ist möglich, dass Sie Ihre DI-Container verwenden möchten würde Ihre Aggregate und nicht nur Activator.CreateInstance<T>() zu bauen.

Sieht aus wie dieser Code-Snippet hier die gleiche Logik wie die AggregateFactory aus dem Testprojekt verwendet: - http://pastebin.com/cFESMiTz

+0

Ich glaube, ich habe den Grund für diese Klasse nicht gefunden öffentlich unterstützt werden, um: es scheint unvollständig und nicht richtig getestet zu sein. Ich habe eine Reihe von Problemen mit diesem Repository und habe bereits einen Fehlerbericht eingereicht: https://github.com/NEventStore/NEventStore/issues/376 – trailmax

+0

Und nein, keine Schnappschüsse für mich, aber ich denke, ich werde es haben Um diese Klasse trotzdem zu vermeiden, stolpere ich über die wichtigsten Probleme, wenn ich sie benutze - ( – trailmax

+0

Ich denke, ich werde am Ende etwas wie geteventstore.com verwenden und eine modifizierte Version des CommonDomain-Projekts verwenden. Ich finde eine ein paar Dinge brauchen ein wenig Anpassung, um für meine Situation zu arbeiten –