2012-07-11 146 views
0

放置例如我可以访问的静态类中的autofac/ninject来自不同的程序集/项目?IoC:使用静态IoC容器进行依赖注入

static class MyContainer static {} IoCContainer ContainerOfCurrentRuntimeContext; }

如果我使用这个,我可以在不同的项目中使用相同的IoC上下文。

+1

但是,如果你这样做,这将意味着你的代码的其他部分将调用它来获取实例,这与控制手段的反转是完全相反的。类不应该负责获取它们的依赖关系。这些依赖关系应该作为构造函数参数(构造函数注入)或属性(属性注入)传递。你的DI容器应该只在应用程序的一个地方可见,通常是最外层的地方。 – 2012-07-11 15:57:32

+0

@DarinDimitrov:不,它不是控制倒置的对立面。控制的倒置只是说我们应该与抽象对话,而不应该自己创建对象。然而,它与依赖注入相反。 – Steven 2012-07-11 17:32:55

+0

请在Stackoverflow和Google搜索“服务定位器反模式”。使用全局可访问的容器称为“服务定位器模式”,它被认为是反模式。 – Steven 2012-07-11 17:34:29

回答

3

没有,这种做法将增加两个新问题:服务定位模式(既算作反模式)。因此,您的代码将与新的依赖关系耦合在一起:您的DI容器

通常你能够克服使用服务定位器的限制,但是这不值得做,因为它更简单介绍组成根为DI。

顺便说一句,你可以有一个配置,并在你所有的不同项目中使用它。

+0

好的,谢谢。单配置点:但在这种情况下,我不会得到相同的实例,不是吗? – user437899 2012-07-12 06:33:48

+0

是的,_one_依赖注入_kernel_(根据nIninject)可以多次解析相同的依赖对象。这是通过声明特定的_scope_(根据nIninject)来完成的。您可以指定每次在线​​程或http请求的作用域中请求DI时,DI将逐字地注入相同的依赖实例。你也可以定义你自己的范围。 – Akim 2012-07-12 15:42:53

相关问题