1

Ninject で IDocumentSession の依存関係をスコープするのに問題があります。

バスがコマンドを実行するたびに、新しい IDocumentSession が必要になります。ファクトリによって作成されたコマンド ハンドラには、同じ IDocumentSession のインスタンスが挿入されている必要があります。バスを CallScope に入れるとうまくいくと思いましたが、AsFactory は CallScope を壊すと思いますか? どうすればこれを達成できますか?

public class Bus : IBus
{
    private readonly ICommandHandlerFactory _factory;
    private readonly IDocumentSession _session;

    public Bus(ICommandHandlerFactory factory, IDocumentSession session)
    {
        _factory = factory;
        _session = session;
    }

    public void ExecuteCommand<T>(T command) where T : class
    {
        var handler = _factory.Create<T>();

        handler.Handle(command);

        _session.SaveChanges();
    }
}

public class ActivateAccountCommandHandler : ICommandHandler<ActivateAccountCommand>
{
    private readonly IDocumentSession _session;

    public ActivateAccountCommandHandler(IDocumentSession session)
    {   
        _session = session;
    }

    public void Handle(ActivateAccountCommand command)
    {
        // Do something
    }
}

kernel.Bind<IDocumentStore>().ToMethod(ctx => DocumentStore.Get()).InSingletonScope();
kernel.Bind<IDocumentSession>().ToMethod(ctx => ctx.Kernel.Get<IDocumentStore>().OpenSession());

kernel.Bind<ICommandHandlerFactory>().AsFactory();

kernel.Bind<IBus>().To<Bus>().InCallScope();

コンテキスト保存も試しましたが、違いはありません。

kernel.Bind<IDocumentSession>().ToMethod(ctx => ctx.ContextPreservingGet<IDocumentStore>().OpenSession());  
4

0 に答える 0