[英]how to get env variable in controller or other classes
我有這個自定義的 ConfigurationService,一切正常,但我現在需要加載基於 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;
}
}
}
從其他地方調用此方法時,例如 controller,如何訪問當前環境?
IConfigurationRoot Config
{
get
{
if (_config == null)
{
_config = ConfigurationService.LoadAppSettings(ENV ?);
}
return _config;
}
}
您必須像這樣在contractor
controller 中注入IHostingEnvironment
接口。
public class HomeController : ControllerBase
{
private readonly IHostingEnvironment _hostingEnvironment;
public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
}
然后將IHostingEnvironment
傳遞給方法
public IActionResult Index()
{
//test
_config = ConfigurationService.LoadAppSettings(_hostingEnvironment);
return Ok();
}
更新
另一種方法是使用IOptions<>
在這種情況下,您必須注冊一個顯示像這樣的環境變量的 class
public class AppSettings
{
public string Environment { get; set; }
}
在ConfigureServices
方法中注冊 class 並從CurrentEnvironment.EnvironmentName
獲取Environment
public IConfiguration Configuration { get; }
private Microsoft.AspNetCore.Hosting.IHostingEnvironment CurrentEnvironment { get; set; }
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
Configuration = configuration;
CurrentEnvironment = env;
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(a => new AppSettings { Environment = CurrentEnvironment.EnvironmentName });
}
然后在您的 controller 中注入IOption<AppSettings>
而不是IHostingEnvironment
並將LoadAppSettings(IHostingEnvironment env)
更改為LoadAppSettings(AppSettings appSettings)
Controller
public class HomeController : ControllerBase
{
private readonly AppSettings _appSettings;
public HomeController(IOptions<AppSettings> options)
{
_appSettings = options.Value;
}
}
行動
public IActionResult Index()
{
//test
_config = ConfigurationService.LoadAppSettings(_appSettings);
return Ok();
}
最后將LoadAppSettings
方法更改為此
public IConfigurationRoot LoadAppSettings(AppSettings 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.