1

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

注意:我想保持我的类没有注入属性等。

4

1 回答 1

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>();
于 2012-10-17T13:16:06.993 回答