为什么我的WindsorContainer无法解析IWindsorContainer?

时间:2011-07-01 16:55:28

标签: c# inversion-of-control castle-windsor

这个例子没有使用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);

然而这对我来说有点奇怪,我做错了吗?

1 个答案:

答案 0 :(得分:6)

Windsor可以自动解析IKernel(容器核心,它具有您需要的大部分功能)。

正如你自己所说,通过容器本身通常不是一个好习惯。大多数情况下,您应该使用工厂,也许通过类型化的工厂设施。