从AUTOFAC中的Web.config读取模块以根据解决方案配置更改容器配置



我已经创建了一些autoFac模块...现在我想在我的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上找到了有趣的保存配置,因为这样我可以根据我的解决方案配置"更改" web.config(您知道,经典web.debug.config,web.release.config等)...

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

我已经在使用模块,但是我认为正确的解决方案不是在模块内添加属性来选择要根据我想部署项目的所选环境解决的组件。我只是想到这个解决方案,阅读了此示例(顺便说一句,覆盖的灵活性仍然是指ConfigurationSettingsReader。可以吗?)

在4.0版本的配置中,您不存储Web.config中的任何内容。所有这些都在单独的XML或JSON文件中。我会推荐JSON。文档概述了很好的:

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

实际上,我们花了很多时间尝试记录尽可能多的记录,因此尽管那里肯定有很多 尽量不要" tl; dr"它。如果您跳过来,您有可能最终进入" 4.0 Pre"部分,认为仍然可以与4.0合作使用。不会。从您对另一个问题的评论中,您可能第一次错过了一些事情。

在快速启动部分中花费一些时间。该部分具有C#和JSON代码,显示了事物的工作原理。同样,很容易跳过。

如果文档没有显示足够的示例,请查看AutoFac.configuration Repo中的单元测试,尤其是包含测试文件的文件夹,这些文件夹显示了XML和JSON格式化的示例。

最后...三个提示:

  1. 配置不是代码的功能替代功能。如果您想做令人惊叹的,基于逻辑的东西,请坚持使用模块,可能会带有某些配置来注册模块。
  2. 熟悉AUTOFAC和DI术语。如果您是DI或AUTOFAC的新手,则"组件","服务",其他术语会令人困惑。配置使用以下术语,这意味着您可能无法获得所在的内容。与文档一起度过时光。入门页面包括一些术语的介绍。
  3. 了解新的Microsoft Config System。有关于Microsoft维护的单独文档。他们的文档说明了从如何基于环境更改配置到创建自定义配置提供商的所有内容。AutoFac站在配置巨头的肩膀上 - 我们不必再在该灵活性中构建,因为它来自新的配置系统。

最新更新