无法解决Castle Windsor中的数组

时间:2014-07-03 02:51:59

标签: .net castle-windsor

我无法让Castle Windsor(3.0)解析数组。我之前已经完成了它并且我解决了其他阵列,所以这很混乱。

首先我添加一个CollectionResolver,它执行数组

_container.Kernel.Resolver.AddSubResolver(new CollectionResolver(_container.Kernel));

然后,我根据这个界面注册我的所有类,其中大约有6个

container.Register(AllTypes.FromThisAssembly().BasedOn<ISearchSource>());

它们肯定在同一个程序集和调试器中,我可以看到这些类在组件列表中,例如。

public class ViewsSearchSource : ISearchSource {...}

然而在解决这个问题的课程中,就像这样......

public SearchBot(ISearchSource[] searchSources)

我得到了

  

&#39; SearchBot&#39;正在等待以下依赖项服务&#39; ISearchSource []&#39;没有注册。

我甚至尝试过明确添加ArrayResolver(以及CollectionResolver)。同样的错误。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

AllInterfaces是必要的,因为您依赖于接口类型:“AllTypes.FromThisAssembly()。BasedOn()”选择实现ISearchSource的所有类型,但这些类型将在具体类型的容器中注册,而不是使用接口(已被用作依赖)。

PS:我建议您使用Classes而不是AllTypes。

“WithServiceDefaultInterfaces()”就足够了。

请记住,windsor根据注册解析依赖关系:IOW你必须标记(在组件注册期间)你的具体所有接口,你将用作依赖。

当你在调试时,在容器上添加一个监视/断点,以查看所有已注册的组件和界面/具体的“链接/分配”到你的组件:揭示分辨率背后的魔力。

答案 1 :(得分:0)

我需要像这样注册

container.Register(AllTypes.FromThisAssembly().BasedOn<ISearchSource>().WithService.AllInterfaces());

即必须添加WithService.AllInterfaces());

我实际上不明白为什么这里需要这个AllInterfaces,但是它有效。