【发布时间】:2012-06-14 15:50:18
【问题描述】:
我在将 IWindsorContainer 作为属性注入时遇到问题。
我正在使用 MVC3。我创建了自己的 IView 和 ViewEngine。在视图中,我根据在 Windsor 中注册的类型动态构建视图。
对于一个条件(“列表”视图),我想显示在 Windsor 中注册的所有 IMyTypes 的列表。 在我的 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 版本。
编辑第二个
我通过在整个依赖链中使用 Windsor 来让它工作,当然,这是你应该做的,我知道了。
【问题讨论】:
-
同意@Code Jammr。绕过容器不是好的做法。
-
因为无法引用容器时需要调用 ResolveAll?再次,请告诉我一个更好的方法。
标签: asp.net-mvc-3 castle-windsor