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
的注册我的安装程序中的第一条语句addsCollectionResolver
。我尝试在初始化WindsorContainer
后添加它,但没有任何改变。请尝试删除IEnumerable
var kernel = container.Kernel;
kernel.Resolver.AddSubResolver(new CollectionResolver(kernel));