【问题标题】:Dependency Injection, handling scope for non-singleton classes依赖注入,处理非单例类的范围
【发布时间】:2012-11-02 01:11:45
【问题描述】:

我非常了解使用依赖注入框架(例如 Ninject / Spring / 等)的吸引力。我喜欢编写新类的想法,而无需考虑依赖项来自何处,只需将其提供给您不知何故。

我发现很多我读过的例子都使用了单例类。所以你有类似的东西:

class A
{
    Database _db;

    A(Database db)
    {
        _db = db;
    }
}

由于整个系统只有一个数据库,您可以在应用程序入口点注册数据库,如下所示:

Bind<Database>().AsSingleton()

我不明白的是如何处理您的依赖项不是单例的情况,并且在任何时候都可能有多个实例。我见过的 DI 框架似乎只能让您选择将其定义为 Singleton 或为每个使用类创建一个新实例。

手动依赖注入?定义一个选择要使用的实例的工厂对象?某种层次范围的机制让你假装他们是单身人士?这种情况存在哪些模式?

【问题讨论】:

    标签: dependency-injection inversion-of-control ninject


    【解决方案1】:

    您的问题非常广泛。如果您有特定的用例,我们可以更准确地回答您的问题。

    我使用的大多数 DI 框架都具有您提到的单例和瞬态范围,而且它们通常也具有每个线程。有些有更多,有些允许您创建自己的扩展来定义自己的范围。通过我看到的每个 http 请求、每个 http 会话和每个 WCF 操作的扩展。

    另见...

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 2013-01-30
      相关资源
      最近更新 更多