为什么我的WindsorContainer不能解析IWindsorContainer
本文关键字:IWindsorContainer 不能 我的 WindsorContainer 为什么 | 更新日期: 2023-09-27 18:00:49
这个例子没有使用最佳实践,使用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(容器核心,它具有您需要的大部分功能(。
正如您自己所说,传递容器本身通常不是一个好的做法。大多数时候,你应该使用工厂,也许是通过打字工厂设施。