Wie erhalte ich die Entwicklungs- / Staging- / Produktions-Hosting-Umgebung in der ConfigureServices
Methode in Startup?
public void ConfigureServices(IServiceCollection services)
{
// Which environment are we running under?
}
Die ConfigureServices
Methode akzeptiert nur einen einzigen IServiceCollection
Parameter.
c#
asp.net-core
asp.net-core-mvc
Muhammad Rehan Saeed
quelle
quelle
IHostingEnvironment
einfach in ConfigureServices injiziert werden? Aufsicht? oder ein Grund, dessen wir uns bewusst sein müssen?Antworten:
Sie können in ConfigureServices problemlos darauf zugreifen. Behalten Sie es einfach während der Startmethode bei einer Eigenschaft bei, die zuerst aufgerufen und übergeben wird. Anschließend können Sie über ConfigureServices auf die Eigenschaft zugreifen.
quelle
CurrentEnvironment.IsEnvironment("environmentname")
.CurrentEnvironment.IsDevelopment()
/CurrentEnvironment.IsProduction()
TL; DR
Legen Sie eine Umgebungsvariable fest, die
ASPNETCORE_ENVIRONMENT
mit dem Namen der Umgebung aufgerufen wird (zProduction
. B. ). Dann machen Sie eines von zwei Dingen:IHostingEnvironment
inStartup.cs
, dann verwenden (env
hier) zu überprüfen:env.IsEnvironment("Production")
. Nicht mit prüfenenv.EnvironmentName == "Production"
!Startup
Klassen oder EinzelpersonenConfigure
/ConfigureServices
Funktionen. Wenn eine Klasse oder die Funktionen mit diesen Formaten übereinstimmen, werden sie anstelle der Standardoptionen in dieser Umgebung verwendet.Startup{EnvironmentName}()
(gesamte Klasse) || Beispiel:StartupProduction()
Configure{EnvironmentName}()
|| Beispiel:ConfigureProduction()
Configure{EnvironmentName}Services()
|| Beispiel:ConfigureProductionServices()
Vollständige Erklärung
In den .NET Core-Dokumenten wird beschrieben, wie dies erreicht wird . Verwenden Sie eine Umgebungsvariable namens
ASPNETCORE_ENVIRONMENT
, die auf die gewünschte Umgebung festgelegt ist. Dann haben Sie zwei Möglichkeiten.Überprüfen Sie den Umgebungsnamen
Aus den Dokumenten :
HINWEIS: Es
env.EnvironmentName
wird nicht empfohlen, den tatsächlichen Wert von zu überprüfen!Verwenden Sie separate Klassen
Aus den Dokumenten :
quelle
In der
.NET Core 2.0
MVC-App /Microsoft.AspNetCore.All
v2.0.0 können Sie eine umgebungsspezifische Startklasse haben, wie von @vaindil beschrieben, aber dieser Ansatz gefällt mir nicht.Sie können auch
IHostingEnvironment
in denStartUp
Konstruktor injizieren . Sie müssen die Umgebungsvariable nicht in derProgram
Klasse speichern .quelle
Dies kann ohne zusätzliche Eigenschaften oder Methodenparameter wie folgt erreicht werden:
quelle
Wenn Sie dies irgendwo in Ihrer Codebasis testen müssen, die keinen einfachen Zugriff auf die IHostingEnvironment hat, können Sie dies auf einfache Weise folgendermaßen tun:
quelle
gemäß den Dokumenten
Sie können so etwas tun ...
quelle
Ich wollte die Umwelt in einen meiner Dienste einbeziehen. Es ist wirklich einfach zu tun! Ich injiziere es einfach so in den Konstruktor:
Jetzt später im Code kann ich dies tun:
BEARBEITEN:
Der obige Code gilt für .NET Core 2. Für Version 3 möchten Sie verwenden
IWebHostEnvironment
.quelle
Die Hosting-Umgebung stammt aus der Umgebungsvariablen ASPNET_ENV, die während des Startvorgangs mit der Erweiterungsmethode IHostingEnvironment.IsEnvironment oder einer der entsprechenden praktischen Methoden von IsDevelopment oder IsProduction verfügbar ist. Speichern Sie entweder das, was Sie benötigen, in Startup () oder im Aufruf von ConfigureServices:
quelle
IHostingEnvironment
ist nicht verfügbar inConfigureServices
.Nur für den Fall, dass sich auch jemand darum kümmert. In .net Core 3+ ist das meiste davon veraltet. Der Update-Weg ist:
quelle
In Dotnet Core 2.0 erwartet der Startup-Konstruktor nur einen IConfiguration-Parameter.
Wie lese ich dort die Hosting-Umgebung? Ich speichere es in der Program-Klasse während der ConfigureAppConfiguration (verwende den vollständigen BuildWebHost anstelle von WebHost.CreateDefaultBuilder):
Ant liest es dann in ConfigureServices wie folgt:
quelle