2016-03-21 10 views
3

ASP.NET 5で強く型付けされた構成をセットアップできました。 .json設定ファイルが変更されたときに自動的にリロードするように設定しました。しかし、これは、型指定されていない構成を使用する場合にのみ有効です。 .jsonファイルが変更された場合でも、厳密に型指定された構成クラスは古い値を保持します。ASP.NET 5:変更時に​​厳密に型指定された構成を再ロードする方法

私はこのような構成を設定しています:

public IConfiguration Configuration { get; set; } 
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv) 
{ 
    // Setup configuration sources 
    var builder = new ConfigurationBuilder() 
     .AddJsonFile("config.json") 
     .AddJsonFile($"config.{env.EnvironmentName}.json"); 
    Configuration = builder.Build() 
     .ReloadOnChanged("config.json") 
     .ReloadOnChanged($"config.{env.EnvironmentName}.json"); 
    /* ... (unrelated stuff edited away) ... */ 
} 

をそして、このようにそれを結合:

public void ConfigureServices(IServiceCollection services) 
{ 
    /* ... (unrelated stuff edited away) ... */ 
    services.AddOptions(); 
    services.AddInstance(Configuration); 
    services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); 
    services.Configure<DbSettings>(Configuration.GetSection("DbSettings")); 
    /* ... (unrelated stuff edited away) ... */ 
} 

(コンフィギュレーションファイルは、次のようになります:)

{ 
    "AppSettings": { 
     "This": "that", 
     "Foo": "bar" 
     /* etc... */ 
    }, 
    "DbSettings": { 
     /* (db settings here) */ 
    } 
} 

(これに対応して、このようなC#クラスがあります:)

public class AppSettings 
{ 
    public string This { get; set; } 
    public string Foo { get; set; } 
    /* etc... */ 
} 

私は依存性注入を経てIOptions<AppSettings>を取得する場合、私はconfig.jsonconfig.Dev.jsonファイルを変更したとき、それは変更されません。 configクラスを更新するには、Webアプリ全体を再起動する必要があります。しかし、代わりに型なしのIConfigurationインスタンスを使用すると、jsonファイルを変更すると自動的に変更されます。

質問:Webappを再起動しなくても、.jsonファイルを変更すると強く型付けされた設定を変更する方法は?

+0

で固定あなたは今までこの制限を克服するために管理していましたか? services.configureをファイル変更時に強制的にロードすることは可能ですか? –

答えて

0

Configuration.GetSection()が呼び出されると、起動時にそのセクションに1回通過します。

実行時にAppSettingsオプションを更新するには、AppSettingsオプションを設定セクションにバインドする必要があります。 asp.netコア1.1上

services.Configure<AppSettings>(option => Configuration.GetSection("AppSettings").Bind(option)); 
+0

は機能しません –