C# 如何在控制器或其他类中获取env变量

C# 如何在控制器或其他类中获取env变量,c#,asp.net-core,.net-core,configuration,C#,Asp.net Core,.net Core,Configuration,我有这个自定义配置服务,一切正常,但我现在需要加载基于env的设置。为此,我使用了这个方法LoadAppSettings public class ConfigurationService : IConfigurationService { public IConfigurationRoot LoadAppSettings(IHostingEnvironment env) { try {

我有这个自定义配置服务,一切正常,但我现在需要加载基于env的设置。为此,我使用了这个方法
LoadAppSettings

public class ConfigurationService : IConfigurationService
    {

        public IConfigurationRoot LoadAppSettings(IHostingEnvironment env)
        {
            try
            {
                var config = new ConfigurationBuilder()
                .SetBasePath(_basePath)
                .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) //for azure functions
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables()
                .Build();

                return config;
            }
            catch (System.IO.FileNotFoundException)
            {
                return null;
            }
        }
    }
当从其他地方(如控制器)调用此方法时,如何访问当前环境

IConfigurationRoot Config
    {
        get
        {
            if (_config == null)
            {
                _config = ConfigurationService.LoadAppSettings(ENV ?);
            }
            return _config;
        }
    }

您必须像这样在
contractor
控制器中插入
IHostingEnvironment
接口

公共类HomeController:ControllerBase
{
私有只读IHostingEnvironment\u hostingEnvironment;
公共家庭控制器(IHostingEnvironment主机环境)
{
_hostingEnvironment=hostingEnvironment;
}
}
然后将
IHostingEnvironment
传递给方法

public IActionResult Index()
{
//试验
_config=ConfigurationService.LoadAppSettings(\u hostingEnvironment);
返回Ok();
}
更新

另一种方法是使用
IOptions

在这种情况下,必须注册一个类,该类显示如下环境变量

公共类AppSettings
{
公共字符串环境{get;set;}
}
ConfigureServices
方法中注册类,并从
CurrentEnvironment.EnvironmentName

公共IConfiguration配置{get;}
私有Microsoft.AspNetCore.Hosting.IHostingEnvironment CurrentEnvironment{get;set;}
公共启动(IConfiguration配置,IHostingEnvironment环境)
{
配置=配置;
CurrentEnvironment=env;
}
public void配置服务(IServiceCollection服务)
{
Configure(a=>newappsettings{Environment=CurrentEnvironment.EnvironmentName});
}
然后在控制器中注入
IOption
而不是
IHostingEnvironment
并将
LoadAppSettings(IHostingEnvironment env)
更改为
LoadAppSettings(AppSettings AppSettings)

控制器

公共类HomeController:ControllerBase
{
私有只读应用设置\u应用设置;
公共家庭控制器(IOPS选项)
{
_appSettings=options.Value;
}
}
行动

public IActionResult Index()
{
//试验
_config=ConfigurationService.LoadAppSettings(\u appSettings);
返回Ok();
}
最后将
LoadAppSettings
方法更改为

public IConfigurationRoot LoadAppSettings(AppSettings环境)
{
尝试
{
var config=new ConfigurationBuilder()
.SetBasePath(_basePath)
.AddJsonFile(“local.settings.json”,可选:true,reloadOnChange:true)//用于azure函数
.AddJsonFile($“appsettings.{env.EnvironmentName}.json”,可选:true)
.AddenEnvironmentVariables()
.Build();
返回配置;
}
捕获(System.IO.FileNotFoundException)
{
返回null;
}

您必须像这样将
IHostingEnvironment
接口注入
承包商
控制器

公共类HomeController:ControllerBase
{
私有只读IHostingEnvironment\u hostingEnvironment;
公共家庭控制器(IHostingEnvironment主机环境)
{
_hostingEnvironment=hostingEnvironment;
}
}
然后将
IHostingEnvironment
传递给方法

public IActionResult Index()
{
//试验
_config=ConfigurationService.LoadAppSettings(\u hostingEnvironment);
返回Ok();
}
更新

另一种方法是使用
IOptions

在这种情况下,必须注册一个类,该类显示如下环境变量

公共类AppSettings
{
公共字符串环境{get;set;}
}
ConfigureServices
方法中注册类,并从
CurrentEnvironment.EnvironmentName

公共IConfiguration配置{get;}
私有Microsoft.AspNetCore.Hosting.IHostingEnvironment CurrentEnvironment{get;set;}
公共启动(IConfiguration配置,IHostingEnvironment环境)
{
配置=配置;
CurrentEnvironment=env;
}
public void配置服务(IServiceCollection服务)
{
Configure(a=>newappsettings{Environment=CurrentEnvironment.EnvironmentName});
}
然后在控制器中注入
IOption
而不是
IHostingEnvironment
并将
LoadAppSettings(IHostingEnvironment env)
更改为
LoadAppSettings(AppSettings AppSettings)

控制器

公共类HomeController:ControllerBase
{
私有只读应用设置\u应用设置;
公共家庭控制器(IOPS选项)
{
_appSettings=options.Value;
}
}
行动

public IActionResult Index()
{
//试验
_config=ConfigurationService.LoadAppSettings(\u appSettings);
返回Ok();
}
最后将
LoadAppSettings
方法更改为

public IConfigurationRoot LoadAppSettings(AppSettings环境)
{
尝试
{
var config=new ConfigurationBuilder()
.SetBasePath(_basePath)
.AddJsonFile(“local.settings.json”,可选:true,reloadOnChange:true)//用于azure函数
.AddJsonFile($“appsettings.{env.EnvironmentName}.json”,可选:true)
.AddenEnvironmentVariables()
.Build();
返回配置;
}
捕获(System.IO.FileNotFoundException)
{
返回null;
}

您需要将
IHostingEnvironment
显式注入到使用该方法的位置。这可能是一个。您需要将
IHostingEnvironment
显式注入到使用该方法的位置。这可能是一个。这不是最佳做法。应用程序应该只在运行时加载所需的内容。您可以这样做