2016-05-19 12 views
1

私Startup.csでは、私は、次の定型コードを持っている:私は何をしたいかASP.NETコア:アクセスと再利用設定オブジェクト

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
     .AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 

は、アクセスされ、再使用、すでに構築されましたConfigurationコントローラのあるオブジェクトは、そこに新しいコンフィグレーションオブジェクトをビルドすることなく、プロジェクト内の他の場所に置くことができます。どうすればいいのですか?

+0

質問は次のとおりです。なぜこれをしたいですか?起動/ブートストラップを修復する以外の場所で 'IConfigurationRoot'要素が必要な理由は考えられません。そこにある設定を読み込み、それを 'IOptions '型に逆シリアル化する必要があります。どこにでも注入できるタイプです。 – Tseng

+0

同意します。入力いただきありがとうございます。 – robbpriestley

答えて

0

あなたは、いくつかの選択肢があります:

  1. ストアグローバル変数に設定オブジェクトを。
    • プロ:シンプルです。
    • 欠点:カップリングを作成し、誰もがConfigurationオブジェクトを認識するようにします。 DIはありません。型の安全性はありません。
  2. 構成オブジェクトをDIコンテナに追加し、それを必要な場所で消費します。
    • プロ:デカップリング。 DIをサポートします。
    • 欠点:構成を認識している他のコンポーネントを作成します。型の安全性はありません。
  3. IOptionsを使用するか、ConfigurationBinderを使用してオプションオブジェクトを作成し、コンテナに追加します。
    • プロ:各コンポーネントがオプションオブジェクトについてしか知りません。 DIをサポートします。タイプセーフです。
    • Con:より多くのコード。 Hello Worldのサイズアプリの

、オプション#1作品だけで罰金。実際の世界のアプリケーションでは、私は間違いなく#3を考えています。

+0

代替#3 IOptionsは行く方法です。それは正しい規則のように見えます。私はちょうどそれを知らなかった。私はこのチュートリアルに従った:http://www.davidhayden.me/blog/asp-net-5-configuration-and-ioptions。私は非常に大きな障害に遭遇しました。それによってMicrosoft.Extensions.Options.ConfigurationExtensionsがproject.jsonに追加され、チュートリアルが正しく機能するようになりました。 – robbpriestley

関連する問題