2011-10-12 56 views
0

我的Global.asax导线了我所有的城堡登记等如何让Castle 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); 
} 

我有点困惑我怎么能做到这一点,什么ķ这个访问温莎的范围是多少? (我假设它只会在我的asp.net应用程序类??工作)

回答

1

你可以做的容器公众,然后从其他类访问,但请注意,这不是很好的做法,违背了反转的目的的控制。国际奥委会的全部想法是,班级不应该负责提取他们的依赖对象,他们应该从外部传递。因此,如果你想遵循良好的做法,DI容器的整个布线应限制在一个位置。

2

这样的事情,我会考虑的Typed Factory Facility。您只需为您的工厂定义一个接口,然后Windsor将拦截对接口上方法的调用,并为您执行一个container.Resolve() - 您不必事件编写接口的实现。