これにはいくつかのねじれと回転がありました。ASP.NET Core 2.0で最新になるように、この回答を変更しました(2018年2月26)。
これは主に公式ドキュメントから取られています:
ASP.NETアプリケーションの設定を操作するにConfiguration
は、アプリケーションのStartup
クラスでのみインスタンス化することをお勧めします。次に、オプションパターンを使用して個々の設定にアクセスします。appsettings.json
次のようなファイルがあるとします。
{
"MyConfig": {
"ApplicationName": "MyApp",
"Version": "1.0.0"
}
}
そして、設定を表すPOCOオブジェクトがあります:
public class MyConfig
{
public string ApplicationName { get; set; }
public int Version { get; set; }
}
次に、構成をビルドしますStartup.cs
。
public class Startup
{
public IConfigurationRoot Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
}
}
.NET Core 2.0ではデフォルトで登録さappsettings.json
れることに注意してください。必要に応じて、環境ごとに設定ファイルを登録することもできます。appsettings.{Environment}.json
設定をコントローラーに注入する場合は、ランタイムに登録する必要があります。私たちはそうしStartup.ConfigureServices
ます:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Add functionality to inject IOptions<T>
services.AddOptions();
// Add our Config object so it can be injected
services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}
そして、次のように注入します。
public class HomeController : Controller
{
private readonly IOptions<MyConfig> config;
public HomeController(IOptions<MyConfig> config)
{
this.config = config;
}
// GET: /<controller>/
public IActionResult Index() => View(config.Value);
}
完全なStartup
クラス:
public class Startup
{
public IConfigurationRoot Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
// Add functionality to inject IOptions<T>
services.AddOptions();
// Add our Config object so it can be injected
services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}
}