IWindsorContainer作为类的参数

时间:2009-03-23 13:48:18

标签: .net inversion-of-control castle-windsor

我有一个类,我想访问我的IOC容器(Windsor),但是我不想保持静态的IWindsorContainer属性 - 我宁愿让容器注入任何需要的类一个IWindsorContainer作为构造函数依赖。

我已经用Unity取消了它,但是当我用Windsor容器尝试相同的东西时,它告诉我IWindsorContainer没有在容器中注册。

我认为我不能只注册IWindsorContainer => WindsorContainer,因为这将导致容器创建一个新的(或不同的)自身实例传递给我的类,并且该实例将不会使用它注册我的所有其他类型。我也没有看到构造容器的方法,在其中注册所有类型,然后针对IWindsorContainer注册自己的实例 - 所有注册方法只接受服务和实现的类型 - 从来不是实际的具体实例。 / p>

3 个答案:

答案 0 :(得分:8)

通常,您不希望将容器注入应用程序组件。

看到这些问题(这个问题几乎与它们重复):

BTW :您免费获得IKernel注射,而 可以注册IWindsorContainer

container.Register(Component.For<IWindsorContainer>().Instance(container));

答案 1 :(得分:1)

通常,像mausch说的那样,在将容器传递给组件之前要三思而后行。你真的需要它来访问容器吗?

要从容器中提取依赖项,请使用typed factories

答案 2 :(得分:0)

我最近很想这样做。我希望能够在对象的生命周期内创建多个服务实例。注册工厂会更好,因为对依赖的需求更加清晰。但是,按服务创建工厂似乎很痛苦。

我最终使用的内容类似于本文中的代码:http://mikehadlow.blogspot.com/2010/01/10-advanced-windsor-tricks-1a-delegate.html。假设您有一个需要创建IService实例的类。本文介绍了一种允许您的类依赖于Func的技术,并且您将自动获得特定于该类的工厂。