Jak uzyskać środowisko hostingu deweloperskiego / przejściowego / produkcyjnego w ConfigureServices
metodzie w programie Startup?
public void ConfigureServices(IServiceCollection services)
{
// Which environment are we running under?
}
ConfigureServices
Metoda zajmuje tylko jeden IServiceCollection
parametr.
c#
asp.net-core
asp.net-core-mvc
Muhammad Rehan Saeed
źródło
źródło
IHostingEnvironment
po prostu wstrzyknąć do ConfigureServices? przeoczenie? lub powód, którego musimy być świadomi?Odpowiedzi:
Możesz łatwo uzyskać do niego dostęp w ConfigureServices, po prostu utrwal go we właściwości podczas metody Startup, która jest wywoływana jako pierwsza i pobiera ją, a następnie możesz uzyskać dostęp do właściwości z ConfigureServices.
źródło
CurrentEnvironment.IsEnvironment("environmentname")
.CurrentEnvironment.IsDevelopment()
/CurrentEnvironment.IsProduction()
TL; DR
Ustaw zmienną środowiskową o nazwie
ASPNETCORE_ENVIRONMENT
z nazwą środowiska (npProduction
.). Następnie wykonaj jedną z dwóch czynności:IHostingEnvironment
doStartup.cs
, a następnie użyć że (env
tutaj) w celu sprawdzenia:env.IsEnvironment("Production")
. Nie sprawdzaj za pomocąenv.EnvironmentName == "Production"
!Startup
klas lub indywidualnychConfigure
/ConfigureServices
funkcji. Jeśli klasa lub funkcje pasują do tych formatów, zostaną użyte zamiast standardowych opcji w tym środowisku.Startup{EnvironmentName}()
(cała klasa) || przykład:StartupProduction()
Configure{EnvironmentName}()
|| przykład:ConfigureProduction()
Configure{EnvironmentName}Services()
|| przykład:ConfigureProductionServices()
Pełne wyjaśnienie
W dokumentacji .NET Core opisano, jak to osiągnąć . Użyj zmiennej środowiskowej o nazwie,
ASPNETCORE_ENVIRONMENT
która jest ustawiona na żądane środowisko, wtedy masz dwie możliwości.Sprawdź nazwę środowiska
Z dokumentów :
UWAGA: Sprawdzanie rzeczywistą wartość
env.EnvironmentName
jest nie zalecane!Użyj oddzielnych klas
Z dokumentów :
źródło
W
.NET Core 2.0
aplikacji MVC /Microsoft.AspNetCore.All
v2.0.0 możesz mieć klasę startową specyficzną dla środowiska, zgodnie z opisem @vaindil, ale nie podoba mi się to podejście.Możesz także wstrzyknąć
IHostingEnvironment
doStartUp
konstruktora. Nie musisz przechowywać zmiennej środowiskowej wProgram
klasie.źródło
Można to osiągnąć bez żadnych dodatkowych właściwości lub parametrów metody, na przykład:
źródło
Jeśli chcesz to przetestować gdzieś w swojej bazie kodu, która nie ma łatwego dostępu do IHostingEnvironment, inny łatwy sposób na zrobienie tego jest następujący:
źródło
zgodnie z dokumentacją
Możesz zrobić coś takiego ...
źródło
Chciałem uzyskać środowisko w jednej z moich usług. To naprawdę proste! Po prostu wstrzykuję to konstruktorowi w ten sposób:
Teraz w dalszej części kodu mogę to zrobić:
EDYTOWAĆ:
Powyższy kod dotyczy platformy .NET Core 2. W przypadku wersji 3 będziesz chciał użyć
IWebHostEnvironment
.źródło
Środowisko hostingu pochodzi ze zmiennej środowiskowej ASPNET_ENV, która jest dostępna podczas uruchamiania przy użyciu metody rozszerzenia IHostingEnvironment.IsEnvironment lub jednej z odpowiednich wygodnych metod IsDevelopment lub IsProduction. Zapisz to, czego potrzebujesz, w Startup () lub w wywołaniu ConfigureServices:
źródło
IHostingEnvironment
nie jest dostępny wConfigureServices
.Na wypadek, gdyby ktoś też tego szukał. W .net core 3+ większość tego jest przestarzała. Sposób aktualizacji to:
źródło
W Dotnet Core 2,0 Konstruktor startowy oczekuje tylko parametru IConfiguration.
Jak czytać tam środowisko hostingowe? Przechowuję go w klasie Program podczas ConfigureAppConfiguration (użyj pełnego BuildWebHost zamiast WebHost.CreateDefaultBuilder):
Następnie Ant czyta go w ConfigureServices w ten sposób:
źródło