【问题标题】:How to: Ninject Bindings (Unit Of Work, Factories and Services)如何:Ninject 绑定(工作单元、工厂和服务)
【发布时间】:2012-10-04 14:00:28
【问题描述】:

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

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

【问题讨论】:

    标签: ninject unit-of-work


    【解决方案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>();
    

    【讨论】:

    • 我倾向于同意这也是我发现的唯一选项之一。我会继续给你答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多