Como obtenho o ambiente de hospedagem de desenvolvimento / armazenamento temporário / produção no ConfigureServices
método em Inicialização?
public void ConfigureServices(IServiceCollection services)
{
// Which environment are we running under?
}
O ConfigureServices
método usa apenas um único IServiceCollection
parâmetro.
c#
asp.net-core
asp.net-core-mvc
Muhammad Rehan Saeed
fonte
fonte
IHostingEnvironment
simplesmente ser injetado no ConfigureServices? supervisão? ou um motivo pelo qual precisamos estar cientes?Respostas:
Você pode acessá-lo facilmente no ConfigureServices, apenas persistir em uma propriedade durante o método Startup, que é chamada primeiro e transferida, e você pode acessar a propriedade no ConfigureServices.
fonte
CurrentEnvironment.IsEnvironment("environmentname")
.CurrentEnvironment.IsDevelopment()
/CurrentEnvironment.IsProduction()
TL; DR
Defina uma variável de ambiente chamada
ASPNETCORE_ENVIRONMENT
com o nome do ambiente (por exemploProduction
). Depois, faça uma de duas coisas:IHostingEnvironment
paraStartup.cs
, em seguida, usar isso (env
aqui) para verificar:env.IsEnvironment("Production")
. Não verifique usandoenv.EnvironmentName == "Production"
!Startup
classes separadas ou individuaisConfigure
/ConfigureServices
funções. Se uma classe ou as funções corresponderem a esses formatos, elas serão usadas em vez das opções padrão nesse ambiente.Startup{EnvironmentName}()
(turma inteira) || exemplo:StartupProduction()
Configure{EnvironmentName}()
|| exemplo:ConfigureProduction()
Configure{EnvironmentName}Services()
|| exemplo:ConfigureProductionServices()
Explicação completa
Os documentos do .NET Core descrevem como fazer isso . Use uma variável de ambiente chamada
ASPNETCORE_ENVIRONMENT
definida para o ambiente que você deseja, e então você tem duas opções.Verifique o nome do ambiente
Dos documentos :
NOTA: Não
env.EnvironmentName
é recomendável verificar o valor real de !Use classes separadas
Dos documentos :
fonte
No
.NET Core 2.0
MVC app /Microsoft.AspNetCore.All
v2.0.0, você pode ter uma classe de inicialização específica do ambiente, conforme descrito por @vaindil, mas eu não gosto dessa abordagem.Você também pode injetar
IHostingEnvironment
noStartUp
construtor. Você não precisa armazenar a variável de ambiente naProgram
classe.fonte
Isso pode ser realizado sem propriedades extras ou parâmetros de método, como:
fonte
Se você precisar testar isso em algum lugar da sua base de código que não tenha acesso fácil ao IHostingEnvironment, outra maneira fácil de fazer isso é:
fonte
de acordo com os documentos
Você pode fazer algo assim ...
fonte
Eu queria obter o ambiente em um dos meus serviços. É realmente fácil de fazer! Eu apenas injeto no construtor assim:
Agora, mais tarde, no código, eu posso fazer isso:
EDITAR:
O código acima é para o .NET Core 2. Para a versão 3, você desejará usar
IWebHostEnvironment
.fonte
O ambiente de hospedagem vem da variável de ambiente ASPNET_ENV, disponível durante a Inicialização, usando o método de extensão IHostingEnvironment.IsEnvironment ou um dos métodos de conveniência correspondentes de IsDevelopment ou IsProduction. Salve o que você precisa em Startup () ou na chamada ConfigureServices:
fonte
IHostingEnvironment
não está disponível emConfigureServices
.Apenas no caso de alguém estar olhando para isso também. No .net core 3+, a maior parte disso é obsoleta. A maneira de atualização é:
fonte
No Dotnet Core 2.0, o construtor Startup espera apenas um parâmetro IConfiguration.
Como ler o ambiente de hospedagem lá? Eu o armazeno na classe Program durante o ConfigureAppConfiguration (use BuildWebHost completo em vez de WebHost.CreateDefaultBuilder):
O Ant lê-o no ConfigureServices assim:
fonte