StructureMap / Autofac:如何基于web.config设置创建对象

时间:2012-12-16 19:31:19

标签: asp.net-mvc inversion-of-control structuremap autofac

我有一个ConfigurationReader类,我正在尝试使用StructureMap或AutoFac连接(我还没有确定我正在使用哪个容器)。

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

}

根据应用程序的配置方式,此类的实例将有1..n(web.config将包含分隔的文件列表)。我在IoC容器中寻找一个扩展点,允许我利用它们来创建ConfigurationReader的实例。

1 个答案:

答案 0 :(得分: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>()进行注册。