2

私は次のことをしようとしています:

        kernel.Bind<IUnitOfWork>().To<UnitOfWork<OrderDbContext>>().WhenInjectedInto<OrderRepository>()
            .InRequestScope();

        kernel.Bind<IUnitOfWork>().To<UnitOfWork<OrderDbContext>>().WhenInjectedInto<InvoiceRepository>()
            .InRequestScope();

        kernel.Bind<IUnitOfWork>().To<UnitOfWork<OrderDbContext>>().WhenInjectedInto<PayslipRepository>()
            .InRequestScope();

私が論理的に実現したいのUnitOfWork<OrderDbContext>は、リクエストに対して の単一インスタンスが作成され、、またはIUnitOfWorkのいずれかに注入されることです。OrderRepositoryInvoiceRepositoryPayslipRepository

代わりに、リポジトリごとに の新しいインスタンスが作成されます。UnitOfWork<OrderDbContext>

IUnitOfWorkこれらのリポジトリのコンストラクターパラメーターを新しい 'dummy'IOrderUnitOfWorkに置き換え、 Ninject の構成内のパラメーターを単に継承してバインドするインターフェースを置き換えるIInvoiceUnitOfWorkと、機能するはずですが、Ninject を機能させるためだけに空のダミーインターフェースを作成したくありません:(IPayslipUnitOfWorkIUnitOfwork

私は次のようなものを探していました:

        kernel.Bind<IUnitOfWork>().To<UnitOfWork<OrderDbContext>>().WhenInjectedInto<OrderRepository, InvoiceRepository, PayslipRepository>()
            .InRequestScope();

しかし、それは存在せず、同じことを行うための連鎖可能な方法も見つかりませんでした。

あなたの助けに感謝します!

4

1 に答える 1

-1

新しい UnitOfWork を作成して、それを IUnitOfWork 定数としてバインドしてみてください。

    UnitOfWork<OrderDbContext> work = new UnitOfWork<OrderDbContext>;

    kernel.Bind<IUnitOfWork>().ToConstant(work).WhenInjectedInto<OrderRepository>().InRequestScope();

    kernel.Bind<IUnitOfWork>().ToConstant(work).WhenInjectedInto<InvoiceRepository>().InRequestScope();

    kernel.Bind<IUnitOfWork>().ToConstant(work).WhenInjectedInto<PayslipRepository>().InRequestScope();
于 2013-11-03T19:06:04.730 に答える