依赖注入,处理非单例类的范围

时间:2012-11-02 01:11:45

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

我理解使用依赖注入框架(如Ninject / Spring /等)的很多吸引力。我喜欢编写新类的想法,而不必考虑依赖项的来源,只是它给了你不知。

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

class A
{
    Database _db;

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

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

Bind<Database>().AsSingleton()

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

手动依赖注入?定义选择要使用的实例的工厂对象?什么样的层次化范围机制让你假装自己是单身?这种情况有哪些模式?

1 个答案:

答案 0 :(得分:1)

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

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

另见......