这个例子并没有通过使用 IServiceLocator 来包装我的 Container 来使用最佳实践,但它让我有点困惑。
我认为 WindsorContainer 可以自动将其自身解析为 IWindsorContainer?
var container = new WindsorContainer();
container.Register(Component.For<INeedWindsorContainer>()
.ImplementedBy<GiveMeWindsorContainer>()
.LifeStyle.Singleton);
INeedWindsorContainer 的实现:
public class GiveMeWindsorContainer : INeedWindsorContainer
{
IWindsorContainer _container;
public GiveMeWindsorContainer(IWindsorContainer container)
{
_container = container;
}
}
但这可能不起作用,因为 WindsorContainer 不知道如何解析 IWindsorContainer!
当然,我想到的直接解决方案是:
var container = new WindsorContainer();
container.Register(
Component.For<IWindsorContainer>()
.Instance(container)
.LifeStyle.Singleton,
Component.For<INeedWindsorContainer>()
.ImplementedBy<GiveMeWindsorContainer>()
.LifeStyle.Singleton);
不过这对我来说有点奇怪,我是不是做错了什么?
最佳答案
Windsor 可以自动解析 IKernel(容器核心,它具有您需要的大部分功能)。
正如您自己所说,传递容器本身通常不是一个好习惯。大多数情况下,您应该使用工厂,也许是通过类型化的工厂设施。
关于c# - 为什么我的 WindsorContainer 不能解析 IWindsorContainer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550947/