Подтвердить что ты не робот

Каковы имена InjectionMembers в запросах RegisterType()?

Я работаю с контейнером Microsoft Unity IOC. Есть куча перегрузок для метода RegisterType(), все похожие на

IUnityContainer RegisterType(Type t, params InjectionMember[] injectionMembers);

Мне интересно, для чего нужны параметры injectionMembers? Я не мог найти документацию для них (даже если они находятся в каждой перегрузке), и ни один из примеров кода, который я использовал, не использовал.

Я что-то упустил? Они обычно не используются или я просто пропустил примеры?

4b9b3361

Ответ 1

Используется перегрузка с массивом InjectionMember, когда вы не предоставляете файл конфигурации, который Unity сообщает, как создать экземпляр данного типа, или если вы хотите создать экземпляр другим способом, чем определено в конфигурации файл.

Перегрузки используются, когда вы хотите сконфигурировать единичный контейнер без файла конфигурации. InjectionMember может быть вызовом конструктора, свойства или метода.

Следующий код, взятый из справки Unity, показывает, как использовать InjectionMembers через свободный интерфейс контейнера.

IUnityContainer myContainer = new UnityContainer();
myContainer.Configure<InjectedMembers>()
  .ConfigureInjectionFor<MyObject>( 
    new InjectionConstructor(12, "Hello Unity!"), 
    new InjectionProperty("MyStringProperty", "SomeText"));

Следующая конфигурация XML эквивалентна приведенному выше коду.

<type type="MyObject" mapTo="MyObject" name="MyObject">
  <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration"> 
    <constructor> 
      <param name="someInt" parameterType="int"> 
        <value value="12"/>
      </param> 
      <param name="someText" parameterType="string">
        <value value="Hello Unity!"/>
      </param> 
    </constructor> 
    <property name="MyStringProperty" propertyType="string">
      <value value="SomeText"/>
    </property>
  </typeConfig> 
</type>

Ответ 2

Также обратите внимание, что, хотя они отображаются в каждой перегрузке, они не требуются.

Я думаю, что это работает, потому что InjectionMemeber является типом массива и является последним параметром, поэтому вы можете иметь ноль или более значений, разделенных запятыми, и массив будет собран автоматически магически...