2013-04-03 65 views
0

[這類似於:(stackoverflow: multiple constructors)]無法在XML配置配置依賴對象作爲構造器參數

我有下面的類:

「的ServiceHost:IServiceHost」 具有以下構造:

「 public ServiceHost(ServiceBase baseService)「

[注意,這實際上是」System.ServiceProcess.ServiceBase「的衍生物]。 如果我手動 - 在代碼中 - 傳入我的「ServiceToHandle:ServiceBase」作爲「baseService」參數,一切都很好。現在,我嘗試通過XM-配置做同樣的,我配置了兩個映射:

<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」 對象,(我的對象),它是從「System.ServiceProcess.ServiceBase」派生。但我得到一個醜陋的錯誤:

未處理的異常:Castle.MicroKernel.Handlers.HandlerException:無法創建組件 'TheServiceController-AKA-ServiceHost',因爲它具有依賴性得到滿足。

'TheServiceController-AKA-ServiceHost'正在等待下列依賴項: - Service'System.ServiceProcess。 ServiceBase'這未註冊。

我試圖添加System.ServiceProcess程序集,但我發現沒有辦法,它可以做!

如果有人可能可以解釋,這裏發生了什麼事情,那真是太棒了!我不希望在層次結構中創建所有對象。

無論如何感謝和 最好的問候!

回答

0

我認爲你必須與服務進行註冊ServiceDemo.ServiceToHandle:ServiceBase 即

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

在解決TheServiceController-AKA-的ServiceHost它會尋找服務ServiceBase,不是派生類型的吧。 這樣你應該也可以省略TheServiceController-AKA-ServiceHost的參數部分

親切的問候, Marwijn。

0

非常感謝;我是 - 直到現在;-) - 昨晚太累了,回答我自己的問題 ;-) ....

我誤解了,xml標籤是什麼。這是我的方法在構造函數簽名中的參數名稱 。它是這樣的:那麼

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

相關問題