我理解使用依赖注入框架(例如 Ninject / Spring / 等)的很多吸引力。我喜欢编写新类的想法,而不必考虑依赖项来自何处,只是它以某种方式提供给您。
我发现很多我读过的例子都使用单例类。所以你有类似的东西:
class A
{
Database _db;
A(Database db)
{
_db = db;
}
}
由于整个系统只有一个数据库,您可以在应用程序入口点注册数据库,如下所示:
Bind<Database>().AsSingleton()
我不明白的是如何处理您的依赖项不是单例的情况,并且在任何时候都可能有多个实例。我见过的 DI 框架似乎只为您提供了将其定义为 Singleton 或为每个使用类创建一个新实例的选项。
手动依赖注入?定义一个选择要使用的实例的工厂对象?某种层次范围的机制让你假装他们是单身人士?这种情况下存在哪些类型的模式?