Autofac将字符串作为参数传递给构造函数

时间:2014-06-23 08:27:18

标签: .net inversion-of-control ioc-container autofac

我想传递一个string列表作为构造函数参数。我使用web.config来指定接口和服务绑定。所以我想配置web.config以在启动类时传递字符串参数列表。我使用autofac作为IOC。有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

以下是带有autofac配置的示例web.config。 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>

有关使用AutoFac进行基于XML的配置的更多信息,请参阅documentation here

答案 1 :(得分:0)

您可以在Autofac的XML配置模块中配置列表,以这种方式将它们作为构造函数参数传递:

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