2012-12-16 26 views
2

我有一個ConfigurationReader類,我嘗試使用StructureMap或AutoFac進行連接(我還沒有確定要使用哪個容器) 。StructureMap/Autofac:如何基於web.config設置創建對象

public class ConfigurationReader { 
    private string _filePath; 
    public ConfigurationReader(string filePath){ 
    this._filePath = filePath; 
    } 
    public IList<Baz> ListStuff(){ 
    //do something with _filePath; 
    } 

} 

有將1..1基於應用程序的配置該類的實例(web.config文件將包含文件的分隔列表)。我正在尋找一個IoC容器中的擴展點,這將允許我利用它們來創建ConfigurationReader的實例。

回答

1

那麼,在AutoFac中,您只需在容器中註冊每個容器(例如在Application_Start期間)。

每當你需要閱讀所有的配置,你可以添加依賴於IEnumerable<ConfigurationReader>(或IConfigurationReader如果你決定要提取的接口),它會爲你提供所有的人。

事情是這樣的:

var builder = new ContainerBuilder(); 
foreach(var file in ConfigurationManager.AppSettings[yourKey].Split(',')) 
{ 
    var fileName = file; 
    builder.Register(c => new ConfigurationReader(fileName)); 
} 
DependencyResolver.SetResolver(new AutofacDependencyResolver(builder.Build())); 

如果提取的接口,那麼你可能想通過將在年底.AsImplementedInterfaces().As<IConfigurationReader>()以及註冊。

+0

我想*這裏有一個錯誤,它涉及到一個lambda訪問你的foreach循環的變量。 –

+0

你是對的,如果問題改變爲本地參考。我會改變它。 –

+0

現在看起來不錯。 –

相關問題