这个例子没有使用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);
然而这对我来说有点奇怪,我做错了吗?
答案 0 :(得分:6)
Windsor可以自动解析IKernel(容器核心,它具有您需要的大部分功能)。
正如你自己所说,通过容器本身通常不是一个好习惯。大多数情况下,您应该使用工厂,也许通过类型化的工厂设施。