我在将 IWindsorContainer 作为属性注入时遇到问题。
我正在使用 MVC3。我创建了自己的 IView 和 ViewEngine。在视图中,我根据在 Windsor 中注册的类型动态构建视图。
对于一个条件(“列表”视图),我想显示在 Windsor 中注册的所有 IMyTypes 的列表。在我的 global.asax 中,我像这样注册 Windsor 视图:
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 来让它工作,当然,这是你应该做的,我了解到。