【问题标题】:Net Core: access to appsettings.json values from Autofac ModuleNet Core:从 Autofac 模块访问 appsettings.json 值
【发布时间】:2018-07-23 06:52:22
【问题描述】:

AspNet 核心应用程序

1) 这样的 Autofac 模块

public class AutofacModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
      //Register my components. Need to access to appsettings.json values from here
    }
}

2) step№1 中的模块注册到Startup.cs

public void ConfigureContainer(ContainerBuilder builder)
    {
       builder.RegisterModule(new AutofacModule());
    }

如何从AutofacModule 访问appsettings.json 值?我需要它来在 AutofacModule 中创建我的对象并将其用于 DI。

【问题讨论】:

    标签: dependency-injection .net-core autofac autofac-module


    【解决方案1】:

    需要更改步骤№2

            public void ConfigureContainer(ContainerBuilder builder)
        {
            //get settigns as object from config
            var someSettings= Configuration.GetSection(typeof(SomeSettings).Name).Get<SomeSettings>();                                                    
            //put settings into module constructor 
            builder.RegisterModule(new AutofacModule(someSettings));
        }
    

    我不知道是否是“最佳实践”方式,但它有效。

    【讨论】:

      【解决方案2】:

      所以目前也在尝试。

      首先是获取必要的 nuget 包,并将它们作为 using 语句添加到类的顶部。

      using Microsoft.Extensions.Configuration.Json;
      using Autofac;
      using Autofac.Configuration;
      using Autofac.Extensions.DependencyInjection;
      

      在您的 Program.cs Main 或 Startup.cs...

      public static IContainer Container { get; set; }
      
      Main() or Startup()
      {
      
      // Add the configuration to the ConfigurationBuilder.
      var config = new ConfigurationBuilder();
      config.AddJsonFile("appsettings.json");
      
      var containerBuilder = new ContainerBuilder();
      
      // Register the ConfigurationModule with Autofac.
      var configurationModule = new ConfigurationModule(config.Build());
      
      containerBuilder.RegisterModule(configurationModule);
      
      //register anything else you need to...
      
      Container = containerBuilder.Build();
      }
      

      这会将配置模块注册到您的 autoFac 容器中,之后您可以使用构造函数注入来通过这一轮...

      public class YourController
      {
          private readonly IContainer _config;
      
          public YourController(IContainer configuration)
          {
              // Use IContainer instance
              _config = configuration;
          }
      

      希望对您有所帮助,如果您有其他不同的方式,请分享。

      【讨论】:

      • @Cris 您能否提供一个示例,如何根据您上面的回复注入 IConfiguration。因为在我的情况下 RegisterModule 没有效果。
      • @Trinitron 相同。我想也许我在这里也误解了IContainer 的使用。不应该是IConfiguration吗??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2020-06-11
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      相关资源
      最近更新 更多