2016-07-03 4 views
1

コンストラクタにオプションのパラメータを持つコンポーネントを登録したい passing optional parameter to autofacは見た目は良く見えますが、xml設定でどのように実装できるかはわかりません。 オプションのパラメータオブジェクトでオートファックコンポーネントを登録する

public Service(IRepo repo, IEnumerable<IServiceVisitor> serviceVisitors = null) 
{ 
    this._repo= repo; 
    _serviceVisitors= serviceVisitors; 
} 

と私はあなただけでそれらを登録する必要が ServiceIServiceVisitor Sを注入するために複合型 IServiceVisitor

答えて

1

を注入したい:

が、これは私のコードであるとしましょう。

<configuration> 
    <autofac defaultAssembly="App">  
    <components> 
     <component type="App.Service" 
       service="App.IService" /> 
     <component type="App.ServiceVisitor1" 
       service="App.IServiceVisitor" /> 
     <component type="App.ServiceVisitor2" 
       service="App.IServiceVisitor" /> 
    </components>  
    </autofac> 
</configuration> 

この場合、デフォルト値IEnumerable<IServiceVisitor>を指定する必要はありません。 IServiceVisitorが登録されていない場合、Autofacは空の配列を自動的に生成します。

public Service(IRepo repo, IEnumerable<IServiceVisitor> serviceVisitors) 
{ /* ... */ } 

あなたはIEnumerable<IServiceVisitor>を必要とするが、あなただけ= null

public Service(IRepo repo, IServiceVisitor serviceVisitor = null) 
{ /* ... */ } 
を使用して、コンストラクタで、オプションとしてそれを宣言する必要があり、オプションの IServiceVisitorを必要としない場合
関連する問題