更新 : 2019-05-05
name options
services.Configure<SlackApiSettings>("Dev", Configuration.GetSection("SlackApi:DevChannel"));
第一个变量是名字, 然后如下获取
public SlackNotificationService(IOptionsSnapshot<SlackApiSettings> options) { SlackApiSettings devSettings = options.Get("Dev"); }
identity 就是用了这个手法在 CookieAuthenticationOptions 上哦.
更新 : 2019-05-03
set options in startup config
services.Configure<BusinessOptions>(Configuration.GetSection("Email")) // set from appsetting .Configure<BusinessOptions>(options => { add more options.Price = 400; options.Name = "zhu ba jie"; });
参考 : https://cnblogs.com/nianming/p/7083964.html
配置写在 appsettings.json 里头
比如
{ "object": { "prop": "value" }, "array": [ { "prop": "value" } ], "businessConfig": { "paypalEmail" : "hengkeat87@gmail.com" } }
startup.cs
namespace Project { public class BusinessConfig { public string paypalEmail { get; set; } } public class Startup { public Startup(IConfiguration configuration) { this.configuration = configuration; } public IConfiguration configuration { get; } public void ConfigureServices(IServiceCollection services) { // 各种获取 config 的方式 var value = configuration["object:prop"]; value = configuration["array:0:prop"]; var obj = configuration.GetSection("object"); value = obj["prop"]; // 绑定类型 string stringValue = configuration.GetValue<string>("object:prop"); BusinessConfig businessConfig = configuration.GetSection("businessConfig").Get<BusinessConfig>(); // 注册到 service 让 control 可以注入 services.Configure<BusinessConfig>(configuration.GetSection("businessConfig")); } } }
controller.cs
public class HomeController : Controller { private readonly BusinessConfig businessConfig; public HomeController( // IOptionsSnapshot 对比 IOptions 特色是更新 config file 时, snapshot 能获取新值, 很奇怪, 不是说 snapshot 吗 ? 怎么反而可以获取到新值...纳闷 IOptionsSnapshot<BusinessConfig> businessConfigOptionsAccessor, // 能 // IOptions<BusinessConfig> businessConfigOptionsAccessor // 不能 ) { businessConfig = businessConfigOptionsAccessor.Value; } public IActionResult Index() { string paypalEmail = businessConfig.paypalEmail; return View(); } }
Configuration 是可以随时 set 的. 要使用 options 获取 config 就一定要执行 services.Configure.
由于 key-vault 只能放在第一层,所以我们通常需要额外功夫 set 进去.
Configuration["email:password"] = Configuration["key-vault-secret-email-password"]; services.Configure<Email>(Configuration.GetSection("email"));