我有一个对象,我想访问Windsor容器。我通过使用容器本身注册容器来完成此操作。像这样:
public class WindsorContainerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
// no idea if this is a good idea or not
container.Register(Component.For<IWindsorContainer>().Instance(container));
}
}
public class Foo
{
public Foo(IWindsorContainer container)
{
_container = container;
}
private IWindsorContainer _container;
}
我没有看到任何人以这种方式这样做的例子。我倾向于看到人们通过静态类或单例类访问容器的示例。
所以我的问题是。是否有任何问题使用容器本身注册容器?
更新
这个场景可能并不像我最初的代码所暗示的那么简单。如果我的对象有特定的依赖关系,我会在构造函数中指定它,如public Foo(IBar bar)
。
在这种情况下,Foo并不完全知道它需要什么依赖。
public class Foo
{
public Foo(IWindsorContainer container)
{
_container = container;
}
private IWindsorContainer _container;
public void Add<T>(T entity)
{
var bar = _container.Resolve<IBar<T>>();
bar.Create(entity);
}
}