0

[这类似于:(stackoverflow:多个构造函数) ]

我有以下课程:

具有以下构造函数的“ServiceHost:IServiceHost”:

“公共服务主机(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>();

我期待一个已配置的主机对象,它必须使用从“System.ServiceProcess.ServiceBase”派生的附加“TheServiceToControl”对象(我的对象)构建。但我遇到了一个丑陋的错误:

未处理的异常:Castle.MicroKernel.Handlers.HandlerException:无法创建组件“TheServiceController-AKA-ServiceHost”,因为它需要满足依赖关系。

'TheServiceController-AKA-ServiceHost' 正在等待以下依赖项: - 服务'System.ServiceProcess。ServiceBase ' 未注册。

我试图添加 System.ServiceProcess 程序集,但我没有办法,它可以制作!

如果有人可能可以解释,这里发生了什么,那就太好了!我没想到必须在层次结构中创建所有对象。

无论如何,谢谢,最好的问候!

4

2 回答 2

0

我认为您必须使用以下服务注册您的 ServiceDemo.ServiceToHandle:ServiceBase 即

<component id="TheServiceToControl"
   service="ServiceDemo.ServiceBase, ServiceToHandle1"
   type="ServiceDemo.ServiceToHandle, ServiceToHandle1"
>
</component>

解析 TheServiceController-AKA-ServiceHost 时,它将查找服务 ServiceBase,而不是它的派生类型。这样,您还应该能够省略 TheServiceController-AKA-ServiceHost 的参数部分

亲切的问候,马尔维恩。

于 2013-04-04T06:08:39.273 回答
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”这个词必须匹配,而不是类型。

但是很多,非常感谢!

兄弟,++马布拉

于 2013-04-04T14:12:13.297 回答