2014-06-23 72 views
0

我想傳遞一個字符串列表作爲構造函數參數。我用web.config來指定接口和服務綁定。所以我想配置web.config在啓動類時傳遞字符串參數列表。我使用autofac作爲IOC。有人能幫我解決嗎?Autofac將字符串的傳遞列表作爲參數傳遞給構造函數

+1

您爲什麼使用基於代碼的配置上的XML的任何特定原因? – Steven

+0

@Steven:這裏有效的問題+1。如果不需要基於XML的配置,通過代碼配置很容易實現。無論如何,我寫了答案如何使用XML來做到這一點。 – Beachwalker

回答

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

+0

我想他是要求一個字符串列表,而不是簡單的字符串。文檔沒有說明如何配置列表。這只是顯示了基本類型(字符串,數字),就像你的例子一樣。所以這不是真的回答這個問題,我想。 – Beachwalker

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) 
    { 
相關問題