.net 无法解析Castle Windsor中的数组
我无法让温莎城堡(3.0)解析数组。我以前做过,我已经解决了其他数组,所以这是混淆 首先,我添加了一个.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
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());