Изменения конфигурации XML в Unity 2.0 - PullRequest
5 голосов
/ 08 ноября 2011

Мы только что обновили проект с Prism 2.0 до Prism 4.0, и у нас возникли проблемы с Unity. По-видимому, в конфигурации XML-контейнера Unity 2.0 произошли некоторые изменения, поскольку мы получаем в качестве нашей первой ошибки «Нераспознанный элемент 'typeConfig'". Вот код:

// ----------------------- 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 ​​на псевдоним, также прокомментировал узел типов (под узлом) и изменил тип его дочерних узлов для регистрации. Это не сработало.

Ответы [ 2 ]

14 голосов
/ 08 ноября 2011

Конфигурация XML изменилась между версиями Unity 1.2 и 2.

Как вы упоминаете, <typeAlias> сейчас <alias>, а <type> должно быть <register>.

Вы можете удалить теги <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 голос
/ 21 марта 2017

Хотя ответ @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>

Схема конфигурации Unity может помочь вам с другими элементами.

...