经过大量研究,此方法(在ASPNetCore 2.2中)可用于从静态类访问appsettings.json配置,但由于某些原因,appsettings.development.json无法再正确加载,但这可能是我项目中的其他问题。reloadOnChange确实起作用。作为奖励,它还具有IHostingEnvironment和IHttpContextAccessor。在这项工作奏效的同时,我最近决定改用更多的DI方法来遵循范式转换,就像其他人提到的那样。
因此,这是在静态类中访问某些DI东西(包括配置)的多种方法之一:
AppServicesHelper.cs:
public static class AppServicesHelper
{
        static IServiceProvider services = null;
        
        
        
        public static IServiceProvider Services
        {
            get { return services; }
            set
            {
                if (services != null)
                {
                    throw new Exception("Can't set once a value has already been set.");
                }
                services = value;
            }
        }
        
        
        
        public static HttpContext HttpContext_Current
        {
            get
            {
                IHttpContextAccessor httpContextAccessor = services.GetService(typeof(IHttpContextAccessor)) as IHttpContextAccessor;
                return httpContextAccessor?.HttpContext;
            }
        }
        public static IHostingEnvironment HostingEnvironment
        {
            get
            {
                return services.GetService(typeof(IHostingEnvironment)) as IHostingEnvironment;
            }
        }
        
        
        
        public static MyAppSettings Config
        {
            get
            {
                
                var s = services.GetService(typeof(IOptionsMonitor<MyAppSettings>)) as IOptionsMonitor<MyAppSettings>;
                MyAppSettings config = s.CurrentValue;
                return config;
            }
        }
    }
}
Startup.cs:
public Startup(IHostingEnvironment env)
{
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
 }
 public void ConfigureServices(IServiceCollection services)
 {
        services.AddHttpContextAccessor();
        
        services.Configure<MyAppSettings>(Configuration.GetSection(nameof(MyAppSettings)));
        
        services.AddSingleton(resolver => resolver.GetRequiredService<IOptionsMonitor<MyAppSettings>>().CurrentValue);
 }
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   AppServicesHelper.Services = app.ApplicationServices;
}
控制器:
public class MyController: Controller
{
   public MyController()
   {
   }
   public MyAppSettings Config => AppServicesHelper.Config;
   public async Task<IActionResult> doSomething()
   {
            testModel tm = await myService.GetModel(Config.Setting_1);
            return View(tm);
   }
}
另一个类库:
public static class MyLibraryClass
{
     public static string GetMySetting_ => AppServicesHelper.Config.Setting_1; 
     public static bool IsDev => AppServicesHelper.HostingEnvironment.IsDevelopment();
}
MyAppSettings.cs是任何映射到appsettings.json中MyAppSettings部分的类:
public class MyAppSettings
{
    public string Setting_1 {get;set;}
}
appsettings.json:
{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "MyAppSettings": {
      "Setting_1": "something"
   }
 }