8

我有一个类,我想访问我的 IOC 容器(Windsor),但是我不想保留一个静态的 IWindsorContainer 属性——我希望容器将自身注入到任何需要 IWindsorContainer 的类中构造函数依赖。

我已经用 Unity 完成了这个,但是当我对 Windsor 容器尝试同样的事情时,它告诉我 IWindsorContainer 没有在容器中注册。

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

4

3 回答 3

8

通常,您不想将容器注入您的应用程序组件中。

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

顺便说一句:您可以IKernel免费获得注射,您可以注册IWindsorContainer

container.Register(Component.For<IWindsorContainer>().Instance(container));
于 2009-03-23T18:37:48.860 回答
1

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

要从容器中提取依赖项,请使用类型工厂

于 2009-03-24T13:29:26.940 回答
0

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

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

于 2010-06-19T16:54:09.073 回答