如何:Ninject绑定(工作单元、工厂和服务)

如何:Ninject绑定(工作单元、工厂和服务),ninject,unit-of-work,Ninject,Unit Of Work,关于这个问题的一点背景:在野外,我看到许多服务依赖于某些IUnitOfWork的实现。当我检查这些应用程序的ninject绑定时,我注意到它们非常简单,因为通常只有一个用于IUnitOfWork的绑定 不幸的是,我的应用程序必须有2个绑定才能进行IUnitOfWork。服务A和B将使用指向暂存数据库的工作单元,服务C和D将使用指向生产数据库的工作单元 我现在可以通过为服务A和B设置命名绑定,然后为IUnitOfWork创建绑定来实现这一点,如下所示: Kernel.Bind<IUnitOf

关于这个问题的一点背景:在野外,我看到许多服务依赖于某些IUnitOfWork的实现。当我检查这些应用程序的ninject绑定时,我注意到它们非常简单,因为通常只有一个用于IUnitOfWork的绑定

不幸的是,我的应用程序必须有2个绑定才能进行IUnitOfWork。服务A和B将使用指向暂存数据库的工作单元,服务C和D将使用指向生产数据库的工作单元

我现在可以通过为服务A和B设置命名绑定,然后为IUnitOfWork创建绑定来实现这一点,如下所示:

Kernel.Bind<IUnitOfWork>()
            .To<StagingUnitOfWork>
            .WhenParentNamed("ServiceA")

kernel.Bind<IServiceA>()
            .To<ServiceA>
            .Named("ServiceA")
Kernel.Bind()
到
.WhenParentNamed(“ServiceA”)
kernel.Bind()
到
.命名为(“服务A”)
但是,我不喜欢必须为“ServiceB”的IUnitOfWork创建另一个绑定。我是否只需要“吸取教训”并使用这种方法


注意:我想保持我的类中没有注入属性等。我想这是唯一的方法

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>();
kernel.Bind().To().WhenInjectedInto();
kernel.Bind().To().WhenInjectedInto();
kernel.Bind().To().WhenInjectedInto();
kernel.Bind().To().WhenInjectedInto();

我想这是你唯一的方法

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>();
kernel.Bind().To().WhenInjectedInto();
kernel.Bind().To().WhenInjectedInto();
kernel.Bind().To().WhenInjectedInto();
kernel.Bind().To().WhenInjectedInto();

我倾向于同意这也是我发现的唯一选择之一。我会继续回答你。我倾向于同意这也是我找到的唯一选择之一。我会继续给你答案。