เรื่องนี้มีการบิดและเปลี่ยนไม่กี่ ฉันได้แก้ไขคำตอบนี้ให้ทันสมัยด้วยASP.NET Core 2.0 (จนถึง 26/02/2018)
ส่วนใหญ่นำมาจากเอกสารอย่างเป็นทางการ :
เพื่อทำงานกับการตั้งค่าในแอปพลิเคชัน 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();
}
}
โปรดทราบว่าappsettings.json
จะมีการลงทะเบียนโดยค่าเริ่มต้นใน. NET Core 2.0 นอกจากนี้เรายังสามารถลงทะเบียน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"));
}
}