1

J Oliver によって作成された EventStore および CommonDomain フレームワークを使用しています。スナップショットを作成すると、それが集計ファクトリに渡されないことに気づきました。その理由を知りたいです。これは、集計を構築する集計ファクトリ メソッドです。

public IAggregate Build(Type type, Guid id, IMemento snapshot)
{
    ConstructorInfo constructor = type.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(Guid) }, null);
    IAggregate aggregate = constructor.Invoke(new object[] { id }) as IAggregate;
}

これをメソッドに追加したときから、スナップショットで埋める必要がある場合、スナップショットパラメーターは null です。

Snapshot snapshotContainer = _store.Advanced.GetSnapshot(id, int.MaxValue);
snapshot = snapshotContainer == null ? null : snapshotContainer.Payload as IMemento;

スナップショットがいっぱいであることを示しています。ここで何が起こっているのですか?

4

1 に答える 1

1

問題が見つかりました。明らかに、EventStoreRepository の GetById メソッドは、オーバーロードする基になるメソッドにバージョン 0 を渡します。したがって、本質的には、明らかにスナップショットを返さないバージョン 0 までスナップショットをロードしようとします。

集約を取得するときに int.MaxValue を追加パラメーターとして追加してコマンド ハンドラーを変更したところ、集約ファクトリがスナップショットを取得できるようになりました。

さらに調べてみると、最新の nuget パッケージには、他の人にも影響を与えるこのバグが含まれていることがわかります: https://github.com/joliver/CommonDomain/issues/27

リポジトリで更新されました。https://github.com/joliver/CommonDomain/commit/0fb51c7516ff06fae032aa04dbfdd0f242f86991 しかし、リリースされていないようです。うまくいけば、それはいつか更新されます。

于 2013-08-22T16:16:25.737 に答える