C# 如何在控制器或其他类中获取env变量
我有这个自定义配置服务,一切正常,但我现在需要加载基于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 {
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
显式注入到使用该方法的位置。这可能是一个。这不是最佳做法。应用程序应该只在运行时加载所需的内容。您可以这样做