Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 无法解析Castle Windsor中的数组_.net_Castle Windsor - Fatal编程技术网

.net 无法解析Castle Windsor中的数组

.net 无法解析Castle Windsor中的数组,.net,castle-windsor,.net,Castle Windsor,我无法让温莎城堡(3.0)解析数组。我以前做过,我已经解决了其他数组,所以这是混淆 首先,我添加了一个CollectionResolver,它不处理数组 _container.Kernel.Resolver.AddSubResolver(new CollectionResolver(_container.Kernel)); 然后,我基于这个接口注册了我的所有类,其中大约有6个 container.Register(AllTypes.FromThisAssembly().BasedOn<I

我无法让温莎城堡(3.0)解析数组。我以前做过,我已经解决了其他数组,所以这是混淆

首先,我添加了一个
CollectionResolver
,它不处理数组

_container.Kernel.Resolver.AddSubResolver(new CollectionResolver(_container.Kernel));
然后,我基于这个接口注册了我的所有类,其中大约有6个

container.Register(AllTypes.FromThisAssembly().BasedOn<ISearchSource>());
但是在解决这个问题的课堂上,就像这样

public SearchBot(ISearchSource[] searchSources)
我明白了

“SearchBot”正在等待未注册的以下DependenciesseService“ISearchSource[]”

我甚至尝试过显式地添加一个
ArrayResolver
(以及
CollectionResolver
)。同样的错误


我在这里遗漏了什么?

我需要这样注册

container.Register(AllTypes.FromThisAssembly().BasedOn<ISearchSource>().WithService.AllInterfaces());
container.Register(AllTypes.fromthissembly().BasedOn().WithService.AllInterfaces());
ie必须使用service.AllInterfaces()添加


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

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

PS:我建议你使用类而不是所有类型

在您的情况下,“WithServiceDefaultInterfaces()”就足够了

请记住,windsor根据注册来解决依赖关系:在组件注册期间,您必须标记混凝土及其将用作依赖关系的所有接口

在调试过程中,在容器上添加一个监视/断点,以查看所有注册的组件和接口/具体的“链接/分配”到您的组件:这揭示了解决方案背后的魔力

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