エンティティフレームワークでカスタムConfigurationProvider
を記述しました。実行時にも更新できるようにしたいので、 IWritableableOption
を作成しました。
アップデート後に設定を更新する必要があります。これは IConfigurationRoot.Reload
。
ただし、.net core 2でIConfigurationRoot
を取得するにはどうすればよいですか?
私が見つけたのは、以前のバージョンではIConfigurationRoot
がスタートアップの一部だったということです。ただし、.net core 2では、より単純なタイプIConfiguration
のみがあります。
public Startup(IConfiguration configuration)
{
// I tried to change this to IConfigurationRoot,
// but this results in an unresolved dependency error
Configuration = configuration;
}
public IConfiguration Configuration { get; }
私も発見しました、私は自分のインスタンスを使用して取得できます
WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration(context, builder) => {
var configurationRoot = builder.build()
})
しかし、スタートアップで使用される構成を更新したいと思います。
では、IConfigurationRoot
を使用してStartup
を取得し、サービスコレクションに挿入するにはどうすればよいですか?
Dealdiane's コメントに感謝します。
IConfiguration
をダウンキャストできます:
public Startup(IConfiguration configuration)
{
Configuration = (IConfigurationRoot)configuration;
}
public IConfigurationRoot Configuration { get; }
IConfiguration
はIConfigurationRoot
を保証しないため、これが意図した方法であるかどうかはまだわかりません。
または、Startup
の初期化の前に注入できます。
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
IConfigurationRoot configurationRoot = null;
return WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) =>
{
configurationRoot = builder.Build();
})
.ConfigureServices(services =>
{
services.AddSingleton<IConfigurationRoot>(configurationRoot);
services.AddSingleton<IConfiguration>(configurationRoot);
})
.UseStartup<Startup>();
}
}