关于这个问题的一点背景:在野外,我看到许多依赖于IUnitOfWork实现的服务。当我检查这些应用程序的ninject绑定时,我注意到它们非常简单,因为IUnitOfWork通常只有一个绑定。
遗憾的是,我的应用程序必须为IUnitOfWork提供2个绑定。服务A和B将使用指向我们的临时数据库的工作单元,服务C和D将使用指向我们的生产数据库的工作单元。
我现在可以通过为服务A和B设置命名绑定,然后为IUnitOfWork创建绑定,如下所示:
Kernel.Bind<IUnitOfWork>()
.To<StagingUnitOfWork>
.WhenParentNamed("ServiceA")
kernel.Bind<IServiceA>()
.To<ServiceA>
.Named("ServiceA")
但是,我不喜欢我将如何为“ServiceB”为IUnitOfWork创建另一个绑定。我只是需要“吮吸”并使用这种方法吗?
注意:我想保持我的课程清除注入属性等。
答案 0 :(得分:1)
我想这是你唯一的方法。
kernel.Bind<IUnitOfWork>().To<StagingUnitOfWork>().WhenInjectedInto<ServiceA>();
kernel.Bind<IUnitOfWork>().To<StagingUnitOfWork>().WhenInjectedInto<ServiceB>();
kernel.Bind<IUnitOfWork>().To<ProductionUnitOfWork>().WhenInjectedInto<ServiceC>();
kernel.Bind<IUnitOfWork>().To<ProductionUnitOfWork>().WhenInjectedInto<ServiceD>();