0

我已经创建了一些 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 上发现了有趣的保存配置,因为这样我可以根据我的解决方案配置“更改”web.config(你知道,经典的 web.debug.config、web.release.config 等)......

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

我已经在使用模块,但我认为正确的解决方案不是在模块内添加一个属性来根据我要部署项目的选定环境选择要解析的组件。我只是想到这个解决方案阅读这个例子(顺便说一句,Flexibility to Override还是指ConfigurationSettingsReader. 可以吗?)

4

1 回答 1

1

在 4.0 版本的配置中,您不会在 web.config 中存储任何内容。它们都在单独的 XML 或 JSON 文件中。我推荐 JSON。该文档很好地概述了这一点:

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

我们实际上花了很多时间试图尽可能多地记录,所以虽然肯定有很多,但尽量不要“TL;DR”它。如果你跳过,你很可能会在“pre 4.0”部分结束,认为仍然可以使用 4.0 的东西。它不会。从您对其他问题的评论看来,您第一次可能错过了一些事情。

花一些时间在快速入门部分。该部分包含 C# 和 JSON 代码,显示了事情是如何工作的。同样,很容易跳过这一点。

如果文档没有显示足够的示例,请查看Autofac.Configuration 存储库中的单元测试,尤其是包含测试文件的文件夹,其中显示了我们在测试中使用的 XML 和 JSON 格式的示例。

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

  1. 配置不是代码的功能替换。如果你想做一些惊人的、疯狂的、基于逻辑的东西,那么坚持使用modules,可能需要一些配置来注册模块。
  2. 熟悉 Autofac 和 DI 术语。如果您不熟悉 DI 或 Autofac,“组件”、“服务”和其他术语会令人困惑。配置使用这些术语,这意味着您可能看不到您正在查看的内容。花时间看文档。入门页面包含一些术语的介绍。
  3. 了解新的 Microsoft 配置系统。 Microsoft 维护了一个单独的文档。他们的文档解释了从如何根据环境更改配置到创建自定义配置提供程序的所有内容。Autofac 站在配置巨头的肩膀上——我们不再需要建立这种灵活性,因为它来自新的配置系统。
于 2017-11-24T03:32:25.053 回答