Castle Windsor CollectionResolver:为什么它不适用于Resolve调用?

Seb*_*ood 7 castle-windsor ioc-container

我已经添加了CollectionResolver作为我的Windsor内核的子解析器,它将正确地在已解析的对象上注入依赖项集合.也就是说,如果我有

class X { public X(IComponent[] components) { ... } }
container.Register(/* lots of IComponents */);
container.Register(Component.For<X>());
Run Code Online (Sandbox Code Playgroud)

components当我解决它时,构造函数的参数是正确构造的

container.Resolve<X>()
Run Code Online (Sandbox Code Playgroud)

但如果相反我只是想获得组件列表本身,

container.Resolve<IComponent[]>()
Run Code Online (Sandbox Code Playgroud)

我得到一个ComponentNotFound例外,抱怨我没有注册任何组件IComponent[].我发现这种不对称违反直觉因为我不确定为什么内核在解析它在构造函数/属性上发现的依赖关系时应该采取不同的行为,而不是它解析用户希望它解析的依赖关系.

Krz*_*mic 9

Resolve/ 的明确划分ResolveAll是由于容器中的内部和无趣的实现细节.集合解析器是一个子依赖性解析器,因此它只适用于依赖项.

我同意这不是很直观.您可以随意登录Windsor的问题跟踪器.

  • "我同意这不是真的不直观." 我猜你的意思是它不是很直观. (2认同)