¿Cómo obtengo el entorno de alojamiento de desarrollo / puesta en escena / producción en el ConfigureServices
método de inicio?
public void ConfigureServices(IServiceCollection services)
{
// Which environment are we running under?
}
El ConfigureServices
método solo toma un único IServiceCollection
parámetro.
c#
asp.net-core
asp.net-core-mvc
Muhammad Rehan Saeed
fuente
fuente
IHostingEnvironment
puede inyectar en ConfigureServices? ¿vigilancia? o una razón que debemos tener en cuenta?Respuestas:
Puede acceder fácilmente a él en ConfigureServices, simplemente consérvelo en una propiedad durante el método de Inicio que se llama primero y lo pasa, luego puede acceder a la propiedad desde ConfigureServices.
fuente
CurrentEnvironment.IsEnvironment("environmentname")
.CurrentEnvironment.IsDevelopment()
/CurrentEnvironment.IsProduction()
TL; DR
Establezca una variable de entorno llamada
ASPNETCORE_ENVIRONMENT
con el nombre del entorno (por ejemploProduction
). Luego haz una de dos cosas:IHostingEnvironment
enStartup.cs
, a continuación, utilizar ese (env
aquí) para comprobar:env.IsEnvironment("Production")
. ¡No verifique usandoenv.EnvironmentName == "Production"
!Startup
clases separadas o individualesConfigure
/ConfigureServices
funciones. Si una clase o las funciones coinciden con estos formatos, se utilizarán en lugar de las opciones estándar en ese entorno.Startup{EnvironmentName}()
(clase completa) || ejemplo:StartupProduction()
Configure{EnvironmentName}()
|| ejemplo:ConfigureProduction()
Configure{EnvironmentName}Services()
|| ejemplo:ConfigureProductionServices()
Explicación completa
Los documentos de .NET Core describen cómo lograr esto . Use una variable de entorno llamada
ASPNETCORE_ENVIRONMENT
que esté configurada en el entorno que desee, luego tiene dos opciones.Comprobar nombre del entorno
De los documentos :
NOTA: Comprobación del valor real de
env.EnvironmentName
que se no se recomienda!Usa clases separadas
De los documentos :
fuente
En la
.NET Core 2.0
aplicación MVC /Microsoft.AspNetCore.All
v2.0.0, puede tener una clase de inicio específica del entorno según lo descrito por @vaindil, pero no me gusta ese enfoque.También puede inyectar
IHostingEnvironment
en elStartUp
constructor. No necesita almacenar la variable de entorno enProgram
clase.fuente
Esto se puede lograr sin propiedades adicionales o parámetros de método, como sigue:
fuente
Si necesita probar esto en algún lugar de su base de código que no tenga fácil acceso al entorno IHosting, otra forma fácil de hacerlo es así:
fuente
por los documentos
Puedes hacer algo como esto ...
fuente
Quería obtener el medio ambiente en uno de mis servicios. ¡Es realmente facil de hacer! Simplemente lo inyecto al constructor así:
Ahora más adelante en el código puedo hacer esto:
EDITAR:
El código anterior es para .NET Core 2. Para la versión 3, querrá usar
IWebHostEnvironment
.fuente
El entorno de alojamiento proviene de la variable de entorno ASPNET_ENV, que está disponible durante el inicio utilizando el método de extensión IHostingEnvironment.IsEnvironment, o uno de los métodos de conveniencia correspondientes de IsDevelopment o IsProduction. Guarde lo que necesita en Startup () o en la llamada ConfigureServices:
fuente
IHostingEnvironment
No está disponible enConfigureServices
.Por si acaso alguien también está buscando esto. En .net core 3+ la mayoría de esto es obsoleto. La forma de actualización es:
fuente
En Dotnet Core 2.0, el constructor de inicio solo espera un parámetro IConfiguration.
¿Cómo leer el entorno de alojamiento allí? Lo almaceno en clase de programa durante ConfigureAppConfiguration (uso BuildWebHost completo en lugar de WebHost.CreateDefaultBuilder):
Ant luego lo lee en ConfigureServices así:
fuente