如何在启动中获取ConfigureServices
方法中的开发/暂存/生产托管环境?
public void ConfigureServices(IServiceCollection services)
{
// Which environment are we running under?
}
ConfigureServices
方法只接受一个IServiceCollection
参数。
发布于 2015-09-14 09:49:52
你可以很容易地在ConfigureServices中访问它,只需在启动方法中将它持久化到一个属性中,该方法首先被调用并传入,然后你就可以从ConfigureServices访问该属性了。
public Startup(IWebHostEnvironment env, IApplicationEnvironment appEnv)
{
...your code here...
CurrentEnvironment = env;
}
private IWebHostEnvironment CurrentEnvironment{ get; set; }
public void ConfigureServices(IServiceCollection services)
{
string envName = CurrentEnvironment.EnvironmentName;
... your code here...
}
发布于 2019-04-11 03:34:19
如果您需要在不能轻松访问IHostingEnvironment的代码库中的某个位置进行测试,另一个简单的方法如下所示:
bool isDevelopment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development";
发布于 2017-10-04 02:59:39
在MVC MVC app / Microsoft.AspNetCore.All
v2.0.0中,你可以使用@vaindil描述的特定于环境的启动类,但我不喜欢这种方法。
您还可以将IHostingEnvironment
注入到StartUp
构造函数中。您不需要将环境变量存储在Program
类中。
public class Startup
{
private readonly IHostingEnvironment _currentEnvironment;
public IConfiguration Configuration { get; private set; }
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
_currentEnvironment = env;
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
......
services.AddMvc(config =>
{
// Requiring authenticated users on the site globally
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
// Validate anti-forgery token globally
config.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
// If it's Production, enable HTTPS
if (_currentEnvironment.IsProduction()) // <------
{
config.Filters.Add(new RequireHttpsAttribute());
}
});
......
}
}
https://stackoverflow.com/questions/32548948
复制相似问题