我有一个使用Typed Factory Facility在Windsor AsFactory()注册的IRunningTaskFactory。界面有一个如下所示的方法:
RunningTask Create(ITask task);
在Windsor注册RunningTask的情况是瞬态有一个构造函数:
public RunningTask(ITask task, ITaskConfigurationFactory taskConfigurationFactory)
其中ITaskConfigurationFactory也在Windsor注册。
我遇到的问题是,当我调用Create方法并传递ITask时,我得到以下错误:
Castle.MicroKernel.Resolvers.DependencyResolverException :缺少依赖性。零件 Husky.nHuskyTasker.Core.Tasks.RunningTask 依赖于 Husky.nHuskyTasker.Core.Tasks.ITask, 无法解决。确保 依赖关系已正确注册 在容器中作为服务,或 作为内联参数提供
根据我在文档中看到的内容,这应该是有用的。
思想?
答案 0 :(得分:5)
我有同样的问题(运行时参数进入一个未解析的类型工厂),结果是因为我工厂的参数名称和实际类的构造函数参数的名称不同,所以在调用.Create时()在打字的工厂上,它无法解析我的参数。
此问题通过问题解决: Can Castle.Windsor TypedFactoryFacility construct a type with only some ref arguments passed inline?
不明显,但这是有道理的。
答案 1 :(得分:1)
我发现如果你为带有变量实例的类型指定虚拟注册,那么你的参数会被传入而没有错误:
Component.For<ITask>().ImplementedBy<AnEmptyTask>()
但我同意,this should work无需进行模拟实施和额外注册。
请注意,注册ITask会产生Windsor的副作用,自动连接涉及该类型的任何公共属性,您可能需要禁止