2017-04-18 1 views
0

In meinem ASP.NET Core-Projekt verlasse ich mich auf die Befehlszeilenargumente, um die Standard-URL zu überschreiben und die Umgebungseinstellung zu überschreiben.Get Hosting-Umgebung mit Hilfe von ConfiguratonBuilder?

Dotnet Uhr laufen --server.urls = https://localhost:5001 --environment "Localhost"

Ich verwende die CommandLineConfigurationExtensions die args zum Configuration hinzuzufügen. Dies funktioniert gut, aber ich mag auch

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var configuration = new ConfigurationBuilder() 
      .AddCommandLine(args) 
      .Build(); 

     // More stuff happens with WebHostBuilder, 
     // and I would very much like to check the 
     // environment here. 
    } 
} 

die eingebaute Konfiguration verwenden würde ich gerne die gleichen Umgebungseinstellungen zuzugreifen, die durch die IHostingEnvironment env Parameter in der Configure() Methode der Startup Klasse zur Verfügung stehen. Aber ich will, es zu tun in Main()

Ich weiß, ich könnte nur die Zeilenargumente Befehl analysieren und für den Wert selbst suchen, oder ziehen Sie den entsprechenden Wert aus der configuration Variable I gerade gebaut. Es erscheint jedoch unelegant, wenn es offensichtlich eine standardisierte Methode dafür gibt, egal in welchem ​​Teil des Frameworks, das die Klasse, die die IHostingEnvironment Schnittstelle implementiert, magisch instanziiert, damit der Rest von uns sie benutzen kann.

Antwort

1

Sie können direkt config["environment"] verwenden oder wenn es nicht angegeben ist, setzen Sie Hosting.EnvironmentName.Production als Standardwert.

Lassen Sie mich erklären, warum.

Wenn man sich in IHostingEnvironmentimplementation, werden Sie sehen, dass EnvironmentName ist eine einfache Eigenschaft mit öffentlichen Getter/Setter und standardmäßig es enthält den Production Wert:

public class HostingEnvironment : IHostingEnvironment 
{ 
    public string EnvironmentName { get; set; } = Hosting.EnvironmentName.Production; 
    ... 
} 

Dann kann Wert geändert werden, wenn Initializeextension method wird genannt. Mit den Daten von WebHostOptions option:

hostingEnvironment.EnvironmentName = 
    options.Environment ?? 
    hostingEnvironment.EnvironmentName; 

Um genauer zu sein, die option.Environment Eigenschaft is used, das heißt

public WebHostOptions(IConfiguration configuration) 
{ 
    ... 
    Environment = configuration[WebHostDefaults.EnvironmentKey]; 
    ... 
} 

wo WebHostDefaults.EnvironmentKey

ist
public static class WebHostDefaults 
{ 
    public static readonly string EnvironmentKey = "environment"; 
} 

So environment Schlüssel aus Config-Quelle verwendet wird, um Spezifiziere Hostingumgebung.

+0

Solange 'config [" environment "]' "merges" in, um die aktuelle Umgebung einzustellen, bin ich glücklich mit der Verwendung. Danke für die Einsicht! Es hat mir das nötige Selbstvertrauen gegeben :) –

Verwandte Themen