2016-11-08 10 views
1

ASP.Net Coreでは、IOptions<T>を使用してクラスに設定値を注入することができます。ASP.Netコア注入設定

だから私は、次のようappsettings.json設定している場合:

{ 
    "CustomSection": { 
    "Foo": "Bar" 
    }, 
    "RootUrl": "http://localhost:12345/" 
} 

私は(私はCustomSectionクラスを定義したと仮定して)私のコンストラクタにIOptions<CustomSection>を注入し、Fooプロパティを読み取ることができます。

RootUrl設定をコンストラクタに挿入するにはどうすればよいですか、これはサポートされていませんか? ない可能あるドキュメントから

+0

あなたは 'RootUrl'のクラスを構築することができません – Daniel

+0

あなたのコンストラクタにIOを挿入しないでください(https://github.com/simpleinjector/SimpleInjector/issues/143#issuecomment-155029876)。 – Steven

答えて

1

Using options and configuration objects

オプションパターンは、関連する設定のグループを表すためにカスタムオプションクラスを使用できます。クラスは、各設定に対してパブリック読み書き可能プロパティを持ち、オプションクラスとして使用するためにパラメータ(例えば、デフォルトコンストラクタ)を使用しないコンストラクタを持つ必要があります。

つまり、設定値を読むためにクラスを生成する必要があります。しかし、あなたのサンプルでは、​​RootUrlはクラスを介して構築することはできません。

4

public class AppSettings { 
    public string RootUrl{ get; set; } 
} 

次のようにあなたのstartup.csにそれを注入し、以下のように、クラスを作成します。

public void ConfigureServices(IServiceCollection services) 
{ 
    services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); 
} 

以下のようにコントローラで使用してください。

これがうまくいけば教えてください。

+0

設定ファイルに「AppSettings」というセクションがないため、これは機能しません。 –

+0

@KaiG RootUrlを使って試してみてください。 – jkyadav

+0

いいえ、期待される形式に文字列を解析できないため、設定を使用しようとすると例外がスローされます。上記の回答は正しいと思います。それはサポートされていません。 –

関連する問題