Dependency injection 为什么温莎要求我的IEnumerable<;T>;参数为';你没有注册吗?

Dependency injection 为什么温莎要求我的IEnumerable<;T>;参数为';你没有注册吗?,dependency-injection,castle-windsor,Dependency Injection,Castle Windsor,我有一个工厂在构造函数中接受IEnumerable。我的工厂签名是这样的 public ServiceFactory(IEnumerable<IPredicate> predicates) 我错过了什么 奇怪的是,我最初在一个单独的项目中编写了这段代码,并将其导入到我的生产项目中。是否可能有其他安装程序干扰此操作 我正在使用Castle Windsor v2.5.1.0。您的另一个项目很可能在某个地方有这样的东西: var kernel = container.Kernel; k

我有一个工厂在构造函数中接受
IEnumerable
。我的工厂签名是这样的

public ServiceFactory(IEnumerable<IPredicate> predicates)
我错过了什么

奇怪的是,我最初在一个单独的项目中编写了这段代码,并将其导入到我的生产项目中。是否可能有其他安装程序干扰此操作


我正在使用Castle Windsor v2.5.1.0。

您的另一个项目很可能在某个地方有这样的东西:

var kernel = container.Kernel;

kernel.Resolver.AddSubResolver(new CollectionResolver(kernel));
因为这是Windsor对各种集合类型(包括
IEnumerable
)中的类型执行
ResolveAll
的原因


然后,您应该删除
容器.Register(Component.For())
这一行实际上没有注册任何内容,这可能是集合解析程序没有启动的原因。

您的另一个项目很可能在某个地方有这样的内容:

var kernel = container.Kernel;

kernel.Resolver.AddSubResolver(new CollectionResolver(kernel));
因为这是Windsor对各种集合类型(包括
IEnumerable
)中的类型执行
ResolveAll
的原因


然后你应该删除container.Register(Component.For())这个东西-那一行实际上没有注册任何东西,这可能就是为什么集合解析器没有启动的原因。

在阅读了我的问题5346次之后,它终于点击了。我最初编写这段代码的测试项目是一个简单的单项目测试。但是,我的生产项目在一个解决方案中有几个不同的项目。我要求温莎解决的问题是在一个单独的集会上解决的。我的安装程序告诉Windsor使用
fromthissassembly()
根据当前程序集的
IPredicate
注册所有类型。很明显,我让温莎找到它找不到的东西

简单的修复方法是使用
fromAssemblyName(“Your.Assembly.Name”)


因此,请务必检查您告诉Windsor检查的组件。

在阅读了我的问题5346次后,它终于点击了。我最初编写这段代码的测试项目是一个简单的单项目测试。但是,我的生产项目在一个解决方案中有几个不同的项目。我要求温莎解决的问题是在一个单独的集会上解决的。我的安装程序告诉Windsor使用
fromthissassembly()
根据当前程序集的
IPredicate
注册所有类型。很明显,我让温莎找到它找不到的东西

简单的修复方法是使用
fromAssemblyName(“Your.Assembly.Name”)


因此,请始终检查您告诉Windsor检查的程序集。

我的安装程序中的第一条语句添加了
CollectionResolver
。我尝试在初始化
WindsorContainer
后添加它,但这没有改变任何内容。尝试删除
IEnumerable
的注册我的安装程序中的第一条语句adds
CollectionResolver
。我尝试在初始化
WindsorContainer
后添加它,但没有任何改变。请尝试删除
IEnumerable
var kernel = container.Kernel;

kernel.Resolver.AddSubResolver(new CollectionResolver(kernel));