千家信息网

ASP.NET Core配置选项的执行顺序是什么

发表于:2024-11-15 作者:千家信息网编辑
千家信息网最后更新 2024年11月15日,这篇文章主要介绍"ASP.NET Core配置选项的执行顺序是什么",在日常操作中,相信很多人在ASP.NET Core配置选项的执行顺序是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2024年11月15日ASP.NET Core配置选项的执行顺序是什么

这篇文章主要介绍"ASP.NET Core配置选项的执行顺序是什么",在日常操作中,相信很多人在ASP.NET Core配置选项的执行顺序是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ASP.NET Core配置选项的执行顺序是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

假设我们同时设置了这三项,那么这三者的执行顺序如下:

public class MyOptions{        public string Version { get; set; } = "v1";}public class MyOptionsSetup : IConfigureOptions, IPostConfigureOptions{        public void Configure(MyOptions options)        {            options.Version = "Configure";        }        public void PostConfigure(string name, MyOptions options)        {            options.Version = "PostConfigure";        }}
// StartUp.csspublic class StartUp{        public void ConfigureServices(IServiceCollection services)        {            // 注册            services.TryAddTransient, MyOptionsSetup>();            services.TryAddTransient, MyOptionsSetup>();                      var options = new MyOptions(); // 默认 options.Version = "v1"            var serviceProvider = services.BuildServiceProvider();                        // 读取 IConfigureOptions 实例,并调用 Configure()            var configureOptions = serviceProvider.GetService>();            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>();            configureOptions2.Configure(options);                                     // 此时 options.Version = "v2",而不是 "Configure-v1"                        // 读取 IPostConfigureOptions 实例,并调用 PostConfigure()            var postConfigureOptions = serviceProvider.GetService>();            postConfigureOptions.PostConfigure(options); // 此时 options.Version = "PostConfigure-v1"        }}

结论

配置的执行顺序:

1. new Options() 默认值2. IConfigureOptions.Configure( options )   【前提是必须在 service.Configure 前调用,需要人为调用】3. service.Configure()4. IPostConfigureOptions( options )   需要人为调用

总之:
只要调用了 services.Configure , 那么再调用 IConfigureOptions.Configure 就无效了,都是执行 services.Configure 提供的委托或者配置

IPostConfigureOptions.Configure 在前在后,只要调用,都可以被触发

注意

如果直接获取 IOptions ,不会执行 serviceConfigure( setupAction ) 提供的委托 setupAction,会先 new Options(),然后执行 IConfigureConfigure(),最后执行 IPostConfigureOptions.Configure(),且仅在首次获取IOptions服务实例的时候触发。

其他

IOptions 会实时更新它的 Value属性,即 MyOptions 实例,
IOptionsSnapshot 不会实时更新,因为它只是一个快照

到此,关于"ASP.NET Core配置选项的执行顺序是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0