[这类似于:(stackoverflow: multiple constructors)]
我有以下课程:
使用以下构造函数“ServiceHost:IServiceHost”:
“public ServiceHost(ServiceBase baseService)”
[注意,这实际上是“System.ServiceProcess.ServiceBase”]的衍生物。 如果我手动 - 在代码中 - 传入我的“ServiceToHandle:ServiceBase”作为“baseService”参数,一切都很好。现在,我尝试通过xm-configuration执行相同操作,并配置了两个映射:
<component id="TheServiceToControl"
service="ServiceDemo.ServiceToHandle, ServiceToHandle1"
type="ServiceDemo.ServiceToHandle, ServiceToHandle1"
>
</component>
<component id="TheServiceController-AKA-ServiceHost"
service="ServiceDemo.IServiceHost, IServiceHost"
type="ServiceDemo.ServiceHost, ServiceHost"
>
<parameters>
<serviceBase>${TheServiceToControl}</serviceBase>
</parameters>
</component>
我正在加载时:
var container = new WindsorContainer(new XmlInterpreter());
IServiceHost host = container.Resolve<IServiceHost>();
我期待一个已配置的主机对象,必须使用附加的“TheServiceToControl”构造 object,(我的对象)派生自“System.ServiceProcess.ServiceBase”。但我得到一个丑陋的错误:
未处理的异常:Castle.MicroKernel.Handlers.HandlerException:无法创建组件 'TheServiceController-AKA-ServiceHost',因为它具有满足的依赖性。
'TheServiceController-AKA-ServiceHost'正在等待以下依赖项: - 服务'System.ServiceProcess。 ServiceBase '未注册。
我尝试添加System.ServiceProcess程序集,但我发现没办法,可以制作它!
如果有人可能会解释,这里发生了什么,那将是非常棒的!我不希望必须在层次结构中创建所有对象。
无论如何,谢谢你 最好的问候!答案 0 :(得分:0)
我认为您必须使用ServiceBase注册ServiceDemo.ServiceToHandle 即。
<component id="TheServiceToControl"
service="ServiceDemo.ServiceBase, ServiceToHandle1"
type="ServiceDemo.ServiceToHandle, ServiceToHandle1"
>
</component>
在解析TheServiceController-AKA-ServiceHost时,它将查找服务ServiceBase,而不是它的派生类型。 这样你也应该能够省略TheServiceController-AKA-ServiceHost
的参数部分亲切的问候, Marwijn。
答案 1 :(得分:0)
非常感谢;我 - 直到现在;-) - 昨晚太累了,回答 我自己的问题;-) ....
我误解了xml-tag是什么。它是参数名称 我在构造函数签名中的方法。就是这样:
public ServiceHost(ServiceBase baseService)
此配置成功:
<component id="TheServiceController-AKA-ServiceHost"
service="ServiceDemo.IServiceHost, IServiceHost"
type="ServiceDemo.ServiceHost, ServiceHost"
>
<parameters>
<baseService>${TheServiceToControl}</baseService>
</parameters>
</component>
因此,“baseService”必须匹配,而不是类型。
但很多,非常感谢!
BR, ++ mabra