2011-11-08 24 views
5

我們剛將項目從棱鏡2.0升級到棱鏡4.0,我們遇到了Unity問題。顯然,unity 2.0容器XML配置有一些變化,因爲我們得到了第一個錯誤「無法識別的元素」typeConfig'「。下面是代碼:Unity 2.0中的XML配置更改

// -----------------------的App.config

<configSections> 
    <section name="runDataParserConfiguration" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" /> 
    </configSections> 
    <runDataParserConfiguration> 
    <typeAliases> 
     <typeAlias alias="IRunDataDispatcher" type="RunDataParser.Interface.IRunDataDispatcher, RunDataParser.Interface" /> 
     <typeAlias alias="IRunDataParser" type="RunDataParser.Interface.IRunDataParser, RunDataParser.Interface" /> 
     <typeAlias alias="IRunDataParserArray" type="RunDataParser.Interface.IRunDataParser[], RunDataParser.Interface" /> 
     <typeAlias alias="Dispatcher" type="RunDataParser.Common.Dispatcher, RunDataParser.Common" /> 
     <typeAlias alias="Parser1" type="RunDataParser.Parser1, RunDataParser" /> 
     <typeAlias alias="Parser2" type="RunDataParser.Parser2, RunDataParser" /> 
     <typeAlias alias="Parser3" type="RunDataParser.Parser3,RunDataParser" /> 
     <typeAlias alias="Parser4" type="RunDataParser.Parser4, RunDataParser" /> 
     <typeAlias alias="Parser5" type="RunDataParser.Parser5, RunDataParser" /> 
     <typeAlias alias="Parser6" type="RunDataParser.Parser6, RunDataParser" /> 
     <typeAlias alias="Parser7" type="RunDataParser.Parser7, RunDataParser" /> 
     <typeAlias alias="Parser8" type="RunDataParser.Parser8, RunDataParser" /> 
     <typeAlias alias="Parser9" type="RunDataParser.Parser9, RunDataParser" /> 
    </typeAliases> 
    <containers> 
     <container> 
     <types> 
      <type type="IRunDataParser" mapTo="Parser1" name="parser1" /> 
      <type type="IRunDataParser" mapTo="Parser2" name="parser2" /> 
      <type type="IRunDataParser" mapTo="Parser3" name="parser3" /> 
      <type type="IRunDataParser" mapTo="Parser4" name="parser4" /> 
      <type type="IRunDataParser" mapTo="Parser5" name="parser5" /> 
      <type type="IRunDataParser" mapTo="Parser6" name="parser6" /> 
      <type type="IRunDataParser" mapTo="Parser7" name="parser7" /> 
      <type type="IRunDataParser" mapTo="Parser8" name="parser8" /> 
      <type type="IRunDataParser" mapTo="Parser9" name="parser9" /> 
      <type type="IRunDataDispatcher" mapTo="Dispatcher" name="runDataDispatcher" /> 
      <type type="Presentation.RawDataManagement.Wrapper.ParserDispatcherWrapper, RawDataManagement"> 
      <typeConfig> 
       <constructor> 
       <param name="runDataDispatcher" parameterType="Dispatcher" /> 
       <param name="runDataParsers" parameterType="IRunDataParserArray"> 
        <array> 
        <dependency name="parser1" /> 
        <dependency name="parser2" /> 
        <dependency name="parser3" /> 
        <dependency name="parser4" /> 
        <dependency name="parser5" /> 
        <dependency name="parser6" /> 
        <dependency name="parser7" /> 
        <dependency name="parser8" /> 
        <dependency name="parser9" /> 
        </array> 
       </param> 
       </constructor> 
      </typeConfig> 
      </type> 
     </types> 
     </container> 
    </containers> 

    </containers>  

// -------------------------------------------------- -

我評論了typeConfig節點並得到錯誤「沒有找到有效的屬性來構造參數runDataDispatcher的值,請檢查配置文件。」

之後,做了一些研究,我刪除了parameterType屬性,但是這不起作用。 我評論了typeAliases節點並將typeAlias節點更改爲別名,還評論了類型節點(在節點下)並將其子節點類型變爲要註冊的類型。非工作。至於你提到現在<typeAlias><alias><type>應該是一個<register>

回答

13

XML配置了統一版本1.2和2

之間變化。

您可以刪除<typeAliases>標籤,<containers>標籤,<types><typeConfig>標籤。

如果可能有助於您將節名稱從「runDataParserConfiguration」更改爲「unity」,那麼您應該能夠使用intellisense來指導配置。配置完成後,如果你願意,可以隨時將它改回「runDataParserConfiguration」。

你的配置看起來類似:

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
     <section name="runDataParserConfiguration" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> 
    </configSections> 

    <runDataParserConfiguration xmlns="http://schemas.microsoft.com/practices/2010/unity"> 

     <alias alias="IRunDataDispatcher" type="RunDataParser.Interface.IRunDataDispatcher, RunDataParser.Interface" /> 
     <alias alias="IRunDataParser" type="RunDataParser.Interface.IRunDataParser, RunDataParser.Interface" /> 
     <alias alias="IRunDataParserArray" type="RunDataParser.Interface.IRunDataParser[], RunDataParser.Interface" /> 
     <alias alias="Dispatcher" type="RunDataParser.Common.Dispatcher, RunDataParser.Common" /> 
     <alias alias="Parser1" type="RunDataParser.Parser1, RunDataParser" /> 
     <alias alias="Parser2" type="RunDataParser.Parser2, RunDataParser" /> 

     <container> 
      <register name="parser1" type="IRunDataParser" mapTo="Parser1" /> 
      <register name="parser2" type="IRunDataParser" mapTo="Parser2" /> 
      <register name="ParserDispatcherWrapper" type="Presentation.RawDataManagement.Wrapper.ParserDispatcherWrapper, RawDataManagement"> 
       <constructor> 
        <param name="runDataDispatcher" type="Dispatcher" /> 
        <param name="runDataParsers" type="IRunDataParserArray"> 
         <array> 
          <dependency name="parser1" /> 
          <dependency name="parser2" /> 
         </array> 
        </param> 
       </constructor> 
      </register> 
     </container> 

    </runDataParserConfiguration> 
</configuration> 
+1

嗨Tuzo,謝謝你的回答!我們得到了正確的配置。我在[這裏]發佈了代碼(http://compositewpf.codeplex.com/discussions/278726),因爲我無法在這裏發佈它。 – kima05

+2

請不要忘記將此問題標記爲「已回答」。 – ErnieL

0

雖然@RandyLevy答案幫我大部分元素,我需要做一些更多的變化。那些不在OP的文件中,但是我會將它們添加到運行Unity 1.2到2.0升級問題的任何人。

我的應用程序,依賴不通過構造函數注入,但通過公共屬性(不要問爲什麼)。

所以,我有這樣的配置元素:

<type type="IMyService" mapTo="MyService"> 
    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration"> 
    <property name="CurrentDataContext" propertyType="IDataContext" /> 
    </typeConfig> 
</type> 

,可以修改爲:

<register type="IMyService" mapTo="MyService"> 
    <property name="CurrentDataContext" dependencyType="IDataContext" /> 
</register> 

The Unity Configuration Schema將可以幫助你另一些其它的元素。