我的global.asax连接了我所有的城堡注册等。
如果我需要让Windsor直接解析界面(除了使用属性注入等进行自动装配之外的怎么办?
是否可以这样做:
container.Resolve<ISomeThing>();
我的global.asax.cs有:
private static IWindsorContainer _container = new WindsorContainer();
private static void BootstrapContainer()
{
_container = new WindsorContainer()
.AddFacility<TypedFactoryFacility>()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(_container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}
我有点困惑,我怎么能这样做,以及这种访问Windsor的范围有多大? (我假设它只适用于我的asp.net应用程序类?)
答案 0 :(得分:2)
对于这样的事情,我会考虑Typed Factory Facility。您只需为工厂定义一个接口,Windsor将拦截对接口上的方法的调用,并为您执行一个container.Resolve() - 您不需要编写接口的实现。
答案 1 :(得分:1)
您可以将容器公开,然后从其他类访问它,但请注意,这不是一个好的做法,并且无法控制反转的目的。 IOC的整个想法是类不应该负责获取它们的依赖对象,它们应该从外部传递。因此,如果您想遵循良好实践,DI容器的整个接线应限制在一个位置。