2011-11-09 30 views
0

我試圖將我發現的示例轉換爲XML配置。統一配置的XML版本?

如果這是我在代碼中所做的;

IUnityContainer unityContainer = new UnityContainer(); 
unityContainer.RegisterType<IServiceProxy<ITestService>, ServiceProxy<ITestService, TestServiceClient>>(); 

我在XML中做什麼?我正在嘗試這個,但我錯過了一些東西;

<unity> 
    <typeAliases> 
    <typeAlias alias="IServiceProxy" type="WCF.IServiceProxy, WCF" /> 
    <typeAlias alias="ITestService"type="Interfaces.ITestService, Interfaces" /> 
    <typeAlias alias="IServiceProxy[ITestService],ServiceProxy[ITestService,TestServiceClient]]" /> 
    </typeAliases> 
    <containers> 
    <container name="servicesContainer"> 
    <type type="IServiceProxy" mapTo="ServiceProxy" /> 
    <type type="ITestService" mapTo="TestService" /> 
    </container> 
    </containers> 
</unity> 
+0

想必你看到一條錯誤消息或一些意外的行爲。你能否提供更多細節?另外,對於它的價值,我避免使用Unity的XML配置,因爲它給我帶來的只是痛苦。我寧願有流利的配置提供的強大的打字。 –

+0

沒有錯誤,當我在TestService或ITestService上進行解析時,我只是沒有得到服務客戶端 – XeroxDucati

+0

您是否有多個實現(除了測試)?如果沒有,只需使用流利的代碼語法。您可以重建以運行測試。 XML讓事情變得更難,而不是更容易。 – TrueWill

回答

0

您的別名在您的示例中完全放大。您不能在別名中使用方括號語法,您必須使用CLR類型語法。在最後一個別名中,你只是給出一個別名,它是一個很長的字符串,但你從不指定類型。你也永遠不會提供ServiceProxy別名,所以這個名字不存在並且找不到。

假設你正在使用Unity 2.0,並且你已經添加了相應的<命名空間>和<組裝>在XML節點指向您的組件,這應該工作:

<unity> 
    <namespace name="WhateverYourNamespaceIs" /> 
    <assembly name="AndWhateverAssembliesAre" /> 
    <container name="servicesContainer"> 
    <register type="IServiceProxy[ITestService]" mapTo="ServiceProxy[ITestService, TestServiceClient]" /> 
    </container> 
</unity> 
+0

就像一個魅力 - 謝謝! – XeroxDucati

2

我只知道Unity 2.0的語法,事實並非如此。例如,type節點應該是register,並且containers節點在任何版本的Unity中都不受支持。是否有可能您正在查看舊的/較差的文檔?

確保您使用的是Unity 2.0。然後開始閱讀Using Design-Time Configuration

只需掃描您的xml的一些其他問題:

  1. 有沒有爲ServiceProxy或TestService的定義的別名。
  2. IServiceProxy []別名:
    • 它沒有定義類型
    • 遞歸別名支持。

Specifying Types in the Configuration File會幫助你的別名語法。