我在将IWindsorContainer注入属性时遇到问题。
我正在使用MVC3。我创建了自己的IView和ViewEngine。在View中,我根据Windsor中注册的类型动态构建视图。
对于一个条件(“列表”视图),我想显示在Windsor中注册的所有IMyType的列表。 在我的global.asax中,我注册了Windsor视图:
container.Register(Component.For<IWindsorContainer>().Instance(container));
然后在我的IView实现中,我声明了一个这样的属性:
public IWindsorContainer Container { get; set; }
实际的IView在另一个组件中。当我进入Render方法时,我想这样做:
IRuleDataDefinition[] ruleDatas = Container.ResolveAll<IRuleDataDefinition>();
但“容器”始终为空。是因为我创建IView的方式(我只是使用new,它没有在Windsor注册?)它是否与IWindsorContainer本身有关?或者我只是把一切都搞错了?
我还读过其他人说“如果你正在使用Container.Resolve你可能做错了。”所以,如果我这样做错了,请告诉我。
修改
或许更好的方法来表达这个问题:当你没有对容器的引用时,最好的方法是使用container.ResolveAll()。我需要遍历所有注册版本的IMyType。
编辑第2个
我通过使用Windsor来完成整个依赖链的工作,当然,这是你应该做的,我学到了。
答案 0 :(得分:3)
你不应该对Container有依赖...这是一种反模式,它闻起来像服务定位器。 那么typed factory呢?您键入的工厂可能会根据公共接口返回给定组件的列表。