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

这篇文章主要介绍“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.css

public 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配置选项的执行顺序是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


本文名称:ASP.NETCore配置选项的执行顺序是什么
URL标题:http://myzitong.com/article/gsccoc.html