2017-04-18 11 views
0

私のASP.NET Coreプロジェクトでは、コマンドライン引数を使用してデフォルトのURLを上書きし、環境設定を上書きしています。ConfiguratonBuilderを使用してホスティング環境を取得しますか?

DOTNETの時計実行--server.urls = https://localhost:5001 --environment "localhost" を私はConfigurationBuilderにargsを追加するためにCommandLineConfigurationExtensionsを使用

。これは正常に動作しますが、私はまた、私はStartupクラスのConfigure()方法でIHostingEnvironment envパラメータを介して利用されている同じ環境設定にアクセスしたい建ての設定

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. 
    } 
} 

を使用したいと思います。しかし、私は私だけでコマンドライン引数を解析し、値のために自分を見て、または私はちょうど建てconfiguration変数から適切な値を引く可能性が実現Main()

でそれをやってみたいです。しかし、フレームワークのどの部分でも、IHostingEnvironmentインターフェイスを実装するクラスを魔法のようにインスタンス化する部分に、他の私たちが使用できるように標準化されたメソッドが明白に存在する場合は、それは控えめなようです。

答えて

1

config["environment"]を直接使用することもできます。指定しない場合は、デフォルト値としてHosting.EnvironmentName.Productionを設定します。

理由を説明しましょう。

public class HostingEnvironment : IHostingEnvironment 
{ 
    public string EnvironmentName { get; set; } = Hosting.EnvironmentName.Production; 
    ... 
} 
が続いて値を変更してもよい

Initializeextension method

あなたはIHostingEnvironmentimplementationに見れば、あなたはEnvironmentNameは、公共のgetter/setterメソッドと、デフォルトでは、単純なプロパティであることがわかりますが、それはProduction値が含まれていますが呼び出されます。 WebHostOptions optionからのデータを使用して:

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

をより具体的には、option.Environmentプロパティis usedが、それは、WebHostDefaults.EnvironmentKeyだからenvironmentキーが設定源からに使用されている

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

ある

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

です環境のホスティングを指定します。

+0

現在の環境を設定するために 'config [" environment "]' "がマージされている限り、私はそれを使用して満足しています。洞察に感謝します!それは私に多くの必要な信頼を提供しています:) –

関連する問題