如何:Ninject Bindings(工作单位,工厂和服务)

时间:2012-10-04 14:00:28

标签: ninject unit-of-work

关于这个问题的一点背景:在野外,我看到许多依赖于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创建另一个绑定。我只是需要“吮吸”并使用这种方法吗?

注意:我想保持我的课程清除注入属性等。

1 个答案:

答案 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>();