2011-11-08 12 views
5

acabamos de actualizar un proyecto de prisma 2.0 a prisma 4.0, y estamos teniendo problemas con Unity. Aparentemente hay varios cambios en la configuración XML del contenedor de la unidad 2.0, ya que recibimos como primer error el "elemento no reconocido 'typeConfig'". Aquí está el código:Cambios de configuración XML en Unity 2.0

// ----------------------- 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>  

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

Comenté typeConfig node y obtuve el error "No se encontraron atributos válidos para construir el valor del parámetro runDataDispatcher. Comprueba los archivos de configuración".

Después de eso y haciendo una investigación eliminé los atributos parameterType pero esto no funcionó. Comenté el nodo typeAliases y cambié los nodos tipoAlias ​​a alias, también comenté tipos de nodo (en el nodo) y cambié el tipo de nodos secundarios para registrarlos. No de esto funcionó.

Respuesta

13

La configuración XML ha cambiado entre las versiones 1.2 y Unity 2.

Como usted menciona es ahora <typeAlias><alias> y <type> debería haber un <register>.

Puede quitar las etiquetas <typeAliases>, <containers> etiquetas, <types> y <typeConfig> etiquetas.

Si le puede resultar útil cambiar el nombre de la sección de "runDataParserConfiguration" a "unity", entonces debería poder usar intellisense para guiar la configuración. Después de la configuración, siempre puede volver a cambiarla a "runDataParserConfiguration" si lo desea.

Su configuración se verá algo como:

<?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

Hola Tuzo, gracias por tu respuesta !! Tenemos la configuración correcta. Publiqué el código en [aquí] (http://compositewpf.codeplex.com/discussions/278726), ya que no pude publicarlo aquí. – kima05

+2

No olvide marcar esta pregunta como "respondida". – ErnieL

0

Aunque la respuesta por @RandyLevy me ayudó con la mayor parte de los elementos, que tenía que hacer algunos cambios más. Esos no estaban en el archivo del OP, pero los agregaré para cualquier persona que se encuentre con problemas de actualización de Unity 1.2 a 2.0.

I mi aplicación, las dependencias no se inyectan a través del constructor, sino a través de propiedades públicas (no preguntes por qué).

Por lo tanto, no tengo elementos de configuración como:

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

que se pueden modificar para:

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

The Unity Configuration Schema le puede ayudar con todavía otros elementos.

Cuestiones relacionadas