我在注入IWindsorContainer作为物业时遇到问题。Castle Windsor IWindsorContainer的物业注入
我正在使用MVC3。我创建了我自己的IView和ViewEngine。从视图中我根据Windsor中注册的类型动态构建视图。
对于一个条件(“列表”视图)我想显示所有在Windsor注册的IMyType列表。 在我的Global.asax我注册了温莎看法是这样的:
container.Register(Component.For<IWindsorContainer>().Instance(container));
然后在我的iView实现,我宣布一个属性是这样的:
public IWindsorContainer Container { get; set; }
实际的iView是另一个组件。当我到达Render方法时,我想这样做:
IRuleDataDefinition[] ruleDatas = Container.ResolveAll<IRuleDataDefinition>();
但“容器”始终为空。是因为我创建IView的方式(我只是使用新的,它没有在Windsor注册?)它是否与IWindsorContainer本身有关?还是我一切都错了?
我也读过其他人说,“如果你使用Container.Resolve你可能做错了。”所以如果我做错了,请告诉我。
编辑
也许更好的方式来短语的问题是:什么是做container.ResolveAll()相当于当你不拥有该容器的参考的最佳方式?我需要遍历所有注册版本的IMyType。
编辑2ND
我把它用温莎整个依赖链,这当然是你应该做的工作,我学到了。
你为什么要这样做? –
同意@Code Jammr。绕过容器不是好习惯。 –
原因当容器不能被引用时,我需要调用ResolveAll?再次,请告诉我一个更好的方法。 –