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)
然而这对我来说似乎有点奇怪,我做错了什么?
Windsor可以自动解析IKernel(容器核心,它具有您需要的大部分功能).
正如您自己所说,通过容器本身通常不是一个好习惯.大多数时候你应该使用工厂,也许是通过打字的工厂设施.