这篇文章主要介绍“ASP.NET Core配置选项的执行顺序是什么”,在日常操作中,相信很多人在ASP.NET Core配置选项的执行顺序是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET Core配置选项的执行顺序是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
public class MyOptions
{
public string Version { get; set; } = "v1";
}
public class MyOptionsSetup : IConfigureOptions<MyOptions>, IPostConfigureOptions<MyOptions>
{
public void Configure(MyOptions options)
{
options.Version = "Configure";
}
public void PostConfigure(string name, MyOptions options)
{
options.Version = "PostConfigure";
}
}
// StartUp.css
public class StartUp
{
public void ConfigureServices(IServiceCollection services)
{
// 注册
services.TryAddTransient<IConfigureOptions<MyOptions>, MyOptionsSetup>();
services.TryAddTransient<IPostConfigureOptions<MyOptions>, MyOptionsSetup>();
var options = new MyOptions(); // 默认 options.Version = "v1"
var serviceProvider = services.BuildServiceProvider();
// 读取 IConfigureOptions<MyOptions> 实例,并调用 Configure()
var configureOptions = serviceProvider.GetService<IConfigureOptions<MyOptions>>();
configureOptions.Configure(options);
// 此时 options.Version = "Configure-v1"
// 不会执行任何操作,仅仅是添加了一个用于配置的委托
services.Configure( options=> options.Version = "v2" );
// 此时 options.Version = "v2"
// 【注意】如果在 service.Configure() 之后调用 IConfigureOptions.Configure(),
// 将只会执行 options=> options.Version = "v2",
// 不会执行 IConfigureOptions.Configure() !!!
var configureOptions2 = serviceProvider.GetService<IConfigureOptions<MyOptions>>();
configureOptions2.Configure(options);
// 此时 options.Version = "v2",而不是 "Configure-v1"
// 读取 IPostConfigureOptions<MyOptions> 实例,并调用 PostConfigure()
var postConfigureOptions = serviceProvider.GetService<IPostConfigureOptions<MyOptions>>();
postConfigureOptions.PostConfigure(options); // 此时 options.Version = "PostConfigure-v1"
}
}
配置的执行顺序:
1. new Options() 默认值
2. IConfigureOptions<Options>.Configure( options )
【前提是必须在 service.Configure 前调用,需要人为调用】
3. service.Configure()
4. IPostConfigureOptions<Options>( options )
需要人为调用
总之:
只要调用了 services.Configure
, 那么再调用 IConfigureOptions.Configure
就无效了,都是执行 services.Configure
提供的委托或者配置
而 IPostConfigureOptions.Configure
在前在后,只要调用,都可以被触发
如果直接获取 IOptions<MyOptions>
,不会执行 serviceConfigure<TOptions>( setupAction )
提供的委托 setupAction
,会先 new Options()
,然后执行 IConfigureConfigure()
,最后执行 IPostConfigureOptions.Configure()
,且仅在首次获取IOptions<MyOptions>
服务实例的时候触发。
IOptions<TOptions>
会实时更新它的 Value属性,即 MyOptions 实例,
IOptionsSnapshot<TOptions>
不会实时更新,因为它只是一个快照
到此,关于“ASP.NET Core配置选项的执行顺序是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/liudonghui/blog/4540538