0

我在将 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 来让它工作,当然,这是你应该做的,我了解到。

4

1 回答 1

3

你不应该依赖容器......这是一种反模式,它闻起来像服务定位器。那么类型化工厂呢?您的类型化工厂可能会返回基于通用接口的给定组件列表。

于 2012-06-14T16:34:02.807 回答