使用Ninject WhenInjectedInto

时间:2013-10-31 05:29:09

标签: ninject

我正在尝试执行以下操作:

        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注入OrderRepositoryInvoiceRepository或{ {1}}。

相反,正在发生的事情是为每个存储库创建了PayslipRepository新实例

我认为如果我将这些存储库上的UnitOfWork<OrderDbContext>构造函数参数替换为仅仅继承IUnitOfWork的新“虚拟”IOrderUnitOfWorkIInvoiceUnitOfWorkIPayslipUnitOfWork接口并绑定Ninject的配置然后它应该工作,但我不想创建空的虚拟接口只是为了让Ninject工作:(

我正在寻找类似的东西:

IUnitOfwork

但这不存在,我也找不到任何可链接的方法来实现相同的工作。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:-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();