Autofac передает список строк в качестве параметра конструктору

#.net #inversion-of-control #ioc-container #autofac

#.net #инверсия управления #ioc-контейнер #autofac

Вопрос:

Я хочу передать список строк в качестве параметра конструктора. Раньше я web.config указывал привязку интерфейса и службы. Поэтому я хочу настроить web.config передачу списка строковых параметров при инициализации класса. Я использовал autofac в качестве IOC. Кто-нибудь может мне помочь в этом?

Комментарии:

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

2. @Steven: 1 за правильный вопрос здесь. Если нет необходимости в конфигурации на основе XML, этого легко добиться с помощью code config. В любом случае, я написал ответ, как это сделать, используя XML.

Ответ №1:

Ниже приведен пример web.config с конфигурацией autofac. Регистрация Autofac.Example.Calculator.Division.Divide содержит пример того, как указывать параметры конструктору.

 <configuration>
  <configSections>
    <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
  </configSections>

<autofac defaultAssembly="Autofac.Example.Calculator.Api">
  <components>
    <component
      type="Autofac.Example.Calculator.Addition.Add, Autofac.Example.Calculator.Addition"
      service="Autofac.Example.Calculator.Api.IOperation" />
    <component
      type="Autofac.Example.Calculator.Division.Divide, Autofac.Example.Calculator.Division"
      service="Autofac.Example.Calculator.Api.IOperation"
      inject-properties="yes">
      <parameters>
        <parameter name="places" value="4" />
      </parameters>
      <properties>
        <property name="EnableExceptions" value="true" />
      </properties>
    </component>
  </components>
  <modules>
    <module type="CalculationModule" />
  </modules>
  <files>
    <file name="Controllers.config" section="controllers" />
    <file name="Services.config" />
  </files>
</autofac>
</configuration>
  

Дополнительную информацию о конфигурации на основе XML с использованием AutoFac можно найти в документации здесь .

Комментарии:

1. Я думаю, что он запрашивал список строк, а не только простые строки. В документации ничего не говорится о том, как настраивать списки. Просто покажите это для базовых типов (строк, чисел), как и в вашем примере. Так что, я думаю, это не совсем ответ на вопрос.

Ответ №2:

Вы можете настроить список в модуле конфигурации XML Autofac для передачи их в качестве параметров конструктора таким образом:

 <component type="MyNameSpace.MyClass, MyAssemblyName">
  <parameters>
    <parameter name="myListParameter">
      <list>
        <item value="MyFirstItem"/>
        <item value="MySecondItem"/>
      </list>
    </parameter>
  </parameters>
</component>
  

Это работает как для компонентов, так и для модулей и (почти) аналогично выполнению этого в коде:

 var list = new List<string> { "MyFirstItem", "MySecondItem" };
var a = new MyNameSpace.MyClass(list);

// or explicitely with named parameter
var b = new MyNameSpace.MyClass(myListParameter: list);
  

Имейте в виду, что имя параметра должно совпадать с именем конструктора вашего класса MyClass:

 public class MyClass
{
  public MyClass(IList<string> myListParameter)
  {