无法将参数传递给Windsor Typed Factory Facility

Sha*_*lle 7 .net dependency-injection castle-windsor

我有一个使用Typed Factory Facility在Windsor AsFactory()注册的IRunningTaskFactory.该接口有一个如下所示的方法:

RunningTask Create(ITask task);
Run Code Online (Sandbox Code Playgroud)

在Windsor注册RunningTask的地方有一个构造函数:

public RunningTask(ITask task, ITaskConfigurationFactory taskConfigurationFactory)
Run Code Online (Sandbox Code Playgroud)

其中ITaskConfigurationFactory也在Windsor注册.

我遇到的问题是,当我调用Create方法并传递ITask时,我得到以下错误:

Castle.MicroKernel.Resolvers.DependencyResolverException:缺少依赖项.组件Husky.nHuskyTasker.Core.Tasks.RunningTask依赖于Husky.nHuskyTasker.Core.Tasks.ITask,无法解析.确保依赖项在容器中作为服务正确注册,或者作为内联参数提供

从我在文档中读到的内容来看,这应该是有效的.

思考?

小智 7

我有同样的问题(运行时参数进入一个未解析的类型工厂),结果是因为我工厂的参数名称和实际类的构造函数参数的名称不同,所以当调用.Create()时键入的工厂,它无法解析我的参数.

这个问题通过问题解决: Castle.Windsor TypedFactoryFacility可以构造一个只有一些内联传递参数的类型吗?

不明显,但这是有道理的.


Cel*_*Cel 1

我发现,如果您为具有变量实例的类型指定虚拟注册,那么您的参数将毫无错误地传入:

Component.For<ITask>().ImplementedBy<AnEmptyTask>()
Run Code Online (Sandbox Code Playgroud)

但我同意,这应该可以工作,而无需进行模拟实现和额外的注册。

请注意,注册 ITask 会产生 Windsor 自动装配涉及该类型的任何公共属性的副作用,您可能需要抑制该副作用