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到任何OrderRepository,InvoiceRepositoryPayslipRepository.

相反,正在为每个存储库创建一个新实例UnitOfWork<OrderDbContext>

我认为如果我将IUnitOfWork这些存储库上的构造函数参数替换为新的 'dummy' IOrderUnitOfWorkIInvoiceUnitOfWork以及IPayslipUnitOfWork简单地继承IUnitOfwork和绑定 Ninject 配置中的接口的接口,那么它应该可以工作,但我不想创建空的虚拟接口只是为了让 Ninject 工作:(

我正在寻找类似的东西:

        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 回答