我有一个类,我想访问我的IOC容器(Windsor),但是我不想保持静态的IWindsorContainer属性 - 我宁愿让容器注入任何需要的类一个IWindsorContainer作为构造函数依赖。
我已经用Unity取消了它,但是当我用Windsor容器尝试相同的东西时,它告诉我IWindsorContainer没有在容器中注册。
我认为我不能只注册IWindsorContainer => WindsorContainer,因为这将导致容器创建一个新的(或不同的)自身实例传递给我的类,并且该实例将不会使用它注册我的所有其他类型。我也没有看到构造容器的方法,在其中注册所有类型,然后针对IWindsorContainer注册自己的实例 - 所有注册方法只接受服务和实现的类型 - 从来不是实际的具体实例。 / p>
答案 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的技术,并且您将自动获得特定于该类的工厂。