城堡温莎属性注入IWindsorContainer

时间:2012-06-14 15:50:19

标签: asp.net-mvc-3 castle-windsor

我在将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来完成整个依赖链的工作,当然,这是你应该做的,我学到了。

1 个答案:

答案 0 :(得分:3)

你不应该对Container有依赖...这是一种反模式,它闻起来像服务定位器。 那么typed factory呢?您键入的工厂可能会根据公共接口返回给定组件的列表。