Передача списка строк или массива строк в конструктор Unity Injection (на основе конфигурации) - PullRequest
2 голосов
/ 01 мая 2010

Кажется, я не могу заставить работать единицу при попытке передать массив строк в список параметров конструктора при использовании конфигурации XML.

Когда я пытаюсь сделать следующее:

<typeConfig ...>
  <constructor ...>
    <param ... parameterType="System.String[]">
     <array>    
      <value.../>
      <value.../>
     </array>
    </param> 
  </constructor>
</typeConfig>

для c'tor, который выглядит так:

void Foo(string[] inputParams_){ ... }

В методе Unity FindConstructor (...) всегда происходит сбой, утверждая, что он не может найти c'or, сопоставляющий тип параметра String.String

Кто-нибудь знает, как успешно передать массив строк в этот тип c'or? Если нет, то как я могу сделать это со списком строк, если c'tor должен был принять IList?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 31 июля 2012

Вам не нужен атрибут 'parameterType' для элемента 'param'

Это будет работать:

    <constructor>
      <param name="eventsDefinitions">
        <array>
          <value value="PhaseLoss"/>
          <value value="DCRC" />
          <value value="PhaseRotation" />
        </array>
      </param>
    </constructor>
1 голос
/ 01 мая 2010

Как правило, я предпочитаю настраивать Unity в коде, поэтому, возможно, мне не очень полезна конфигурация, если это необходимо. Но ....

Обычно я бы использовал ConstructorInjector при регистрации:

container.Configure () .ConfigureInjectionFor (новый InjectionConstructor ([ значение ]))

Но в соответствии с: Могу ли я передать параметры конструктора в метод Unity Resolve ()?

В Unity 2 теперь также включена возможность динамической передачи параметров в конструктор во время разрешения:

"container.Resolve (новый ParameterOverrides {{"name", "bar"}, {"address", 42}}); "

0 голосов
/ 01 мая 2010

Возможно, вам придется полностью указать имя типа:

System.String[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

По желанию, вы можете отказаться от версии, если вам все равно / знать.

...