从autofac中的web.config读取模块,根据解决方案配置更改容器配置

时间:2017-11-23 11:41:13

标签: autofac autofac-module autofac-configuration

我已经创建了一些Autofac模块......现在我想使用web.config在我的容器中注册其中一些...在我的web.config中我写道:

<autofac defaultAssembly="Autofac.Example">
  <modules>
    <module type="DebugModuleTest1"></module>
    <module type="DebugModuleTest2"></module>
  </modules>
</autofac>

现在我必须建立我的容器。但是autofac文档对我来说并不清楚。我不明白我必须做什么来阅读我的模块并构建容器。

public class MyCustomContainer
{
    public void Build(HttpConfiguration config)
    {            
        var builder = new ContainerBuilder();

        Microsoft.Extensions.Configuration.ConfigurationBuilder x = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
        //var sec = x.AddInMemoryCollection().Build().GetSection("autofac");
        // var y = x.AddXmlFile("Web.config");

        var y = new ConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory);
        var z = y.AddXmlFile("Web.Config");


        config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
    }
}

我使用的是最新版本的Autofac,因此我没有ConfigurationSettingsReader课程。

有人可以帮我吗?

修改

我在web.config上找到了有趣的保存配置,因为通过这种方式我可以改变&#34; web.config根据我的解决方案配置(你知道,经典的web.debug.config,web.release.config等)......

这可以帮助我注册正确的模块,避免使用指令(#if bla bla bla,...)或只是条件......

我已经在使用模块,但我认为正确的解决方案是在模块中添加一个属性,以根据我想要部署项目的选定环境选择要解析的组件。 我只想到这个解决方案example(顺便提一下,Flexibility to Override仍然引用ConfigurationSettingsReader。这样可以吗?)

1 个答案:

答案 0 :(得分:1)

在4.0版本的配置中,您不会在web.config中存储任何内容。它全部在单独的XML或JSON文件中。我推荐JSON。 The documentation非常清楚地说明了这一点:

  

如果您之前使用的是基于app.config或web.config的配置,则需要将配置迁移到新格式,并更新使用应用程序容器设置配置的方式。

我们实际上花了很多时间尝试尽可能多地记录,所以虽然很多很多但尝试不要“TL; DR”它。如果你跳过,你可能最终会在“4.0之前”部分认为仍然适用于4.0的东西。它不会。听起来像your comment on this other question,你可能第一次错过了一些事情。

在快速入门部分花一些时间。该部分同时包含C#和JSON代码,展示了工作原理。再一次,很容易跳过它。

如果文档没有显示足够的示例,请查看Autofac.Configuration repo中的单元测试,尤其是the folder full of test files,其中显示了我们在测试中使用的XML和JSON格式示例。

最后......三个提示:

  1. 配置不是代码的功能替换。如果您正在寻找基于逻辑的惊人,疯狂的东西,那么坚持modules,可能还有一些用于注册模块的配置。
  2. 熟悉Autofac和DI术语。如果您是DI或Autofac的新手,“组件”,“服务”和其他术语将会令人困惑。配置使用这些术语,这意味着您可能无法获得您正在查看的内容。花时间与文档。 The getting started page包括一些术语的介绍。
  3. 了解Microsoft维护的新Microsoft配置系统。 There is separate doc about that。他们的文档解释了从如何根据环境更改配置到创建自定义配置提供程序的所有内容。 Autofac站在配置巨头的肩膀上 - 我们不再需要建立这种灵活性,因为它来自新的配置系统。