【发布时间】:2012-07-11 15:52:20
【问题描述】:
把例如我可以访问的静态类中的 autofac/ninject 来自不同的程序集/项目?
静态类 MyContainer { 静态 IoCContainer ContainerOfCurrentRuntimeContext; }
如果我使用它,我可以在不同的项目中使用相同的 IoC 上下文。
【问题讨论】:
-
但是如果你这样做,就意味着你的代码的其他部分会调用它来获取实例,这与控制反转的含义完全相反。类不应该负责获取它们的依赖项。这些依赖项应该作为构造函数参数(构造函数注入)或属性(属性注入)传递。您的 DI 容器应仅在应用程序的一个位置可见,该位置通常是最外层的外壳。
-
@DarinDimitrov:不,这不是控制反转的反面。控制反转只是说我们应该与抽象对话,而不应该自己创建对象。然而,它与依赖注入相反。
-
请在 Stackoverflow 和 Google 中搜索“服务定位器反模式”。使用可全局访问的容器称为“服务定位器模式”,它被认为是一种反模式。
标签: dependency-injection static inversion-of-control