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

And*_*rew 2 c# castle-windsor inversion-of-control

这个例子没有使用IServiceLocator来包装我的容器,但它让我有点困惑.

我认为WindsorContainer可以自动解析为IWindsorContainer?

var container = new WindsorContainer();

container.Register(Component.For<INeedWindsorContainer>()
    .ImplementedBy<GiveMeWindsorContainer>()
    .LifeStyle.Singleton);
Run Code Online (Sandbox Code Playgroud)

INeedWindsorContainer的实现:

public class GiveMeWindsorContainer : INeedWindsorContainer
{
    IWindsorContainer _container;

    public GiveMeWindsorContainer(IWindsorContainer container)
    {
        _container = container;
    }
}
Run Code Online (Sandbox Code Playgroud)

但这可能不起作用,因为WindsorContainer不知道如何解决IWindsorContainer!

当然,我想出的直接解决方案是:

var container = new WindsorContainer();

container.Register(
     Component.For<IWindsorContainer>()
        .Instance(container)
        .LifeStyle.Singleton,
     Component.For<INeedWindsorContainer>()
        .ImplementedBy<GiveMeWindsorContainer>()
        .LifeStyle.Singleton);
Run Code Online (Sandbox Code Playgroud)

然而这对我来说似乎有点奇怪,我做错了什么?

Mau*_*fer 7

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

正如您自己所说,通过容器本身通常不是一个好习惯.大多数时候你应该使用工厂,也许是通过打字的工厂设施.