#.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)
{