【问题标题】:Autofac pass list of string as parameter to constructorAutofac将字符串列表作为参数传递给构造函数
【发布时间】:2014-08-13 05:30:33
【问题描述】:

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

【问题讨论】:

  • 您使用 XML 而不是基于代码的配置有什么特别的原因吗?
  • @Steven:这里的有效问题 +1。如果不需要基于 XML 的配置,很容易通过代码配置来实现。无论如何,我写了如何使用 XML 执行此操作的答案。

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


【解决方案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

【讨论】:

  • 我认为他要求的是字符串列表,而不仅仅是简单的字符串。该文档没有说明如何配置列表。就像在您的示例中一样,仅针对基本类型(字符串,数字)显示此内容。所以我认为这并不能真正回答这个问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多