2013-10-31 36 views
2

我試圖做到以下幾點:使用Ninject WhenInjectedInto

 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>

我想如果我更換這些倉庫的新「虛擬」 IOrderUnitOfWorkIInvoiceUnitOfWorkIPayslipUnitOfWork接口,簡單地繼承IUnitOfwork與那些在Ninject的配置綁定,那麼它應該工作IUnitOfWork構造放慢參數,但我不想創建空的虛擬接口,只是爲了獲得Ninject工作:(

我一直在尋找類似:

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

,但不存在了,我找不到任何可鏈接的方法來獲得相同的工作無論是。

您的幫助非常感謝!

回答

-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(); 
+0

這將導致你有一個單一的UnitOfWork對於這顯然是不希望整個應用程序生命週期。 –