.NetCore选项数据热更新
2021/7/19 23:09:51
本文主要是介绍.NetCore选项数据热更新,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 关键类型
- IOptionsMonitor<out TOptions>
- IOptionsSnapshot<out TOptions>
2. 场景
- 范围作用域类型(AddScoped)使用 IOptionsSnapshot
- 单例服务(AddSingleton)使用 IOptionsMonitor
3. 通过代码更新选项
- IPostConfigureOptions<TOptions>
4. IOptionsSnapshot热更新代码
public interface IOrderService { int ShowMaxCount(); } public class OrderService : IOrderService { IOptionsSnapshot<OrderServiceOptions> _options; public OrderService(IOptionsSnapshot<OrderServiceOptions> options) { this._options = options; } public int ShowMaxCount() { return _options.Value.MaxCount; } } public class OrderServiceOptions { public int MaxCount { get; set; } = 100; }
public void ConfigureServices(IServiceCollection services) { services.Configure<OrderServiceOptions>(Configuration.GetSection("OrderService")); services.AddScoped<IOrderService, OrderService>(); services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "NET_Core", Version = "v1" }); }); }
5. IOptionsMonitor热更新代码
public interface IOrderService { int ShowMaxCount(); } public class OrderService : IOrderService { IOptionsMonitor<OrderServiceOptions> _options; public OrderService(IOptionsMonitor<OrderServiceOptions> options) { this._options = options; } public int ShowMaxCount() { return _options.CurrentValue.MaxCount; } } public class OrderServiceOptions { public int MaxCount { get; set; } = 100; }
public void ConfigureServices(IServiceCollection services) { services.Configure<OrderServiceOptions>(Configuration.GetSection("OrderService")); services.AddSingleton<IOrderService, OrderService>(); services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "NET_Core", Version = "v1" }); }); }
6. IOptionsMonitor监听配置变化
备注1:IOptionsSnapshot不支持监听配置变化
备注2:核心代码如下,其余代码在原有基础不变
public OrderService(IOptionsMonitor<OrderServiceOptions> options) { this._options = options; _options.OnChange(option => { Console.WriteLine($"配置发生了变化:{option.MaxCount}"); }); }
7. 简化服务注册代码
把服务注册的代码,放在静态扩展方法中
namespace Microsoft.Extensions.DependencyInjection { public static class OrderServiceExtensions { public static IServiceCollection AddOrderService(this IServiceCollection services, IConfiguration configuration) { services.Configure<OrderServiceOptions>(configuration); services.AddSingleton<IOrderService, OrderService>(); return services; } } }
public void ConfigureServices(IServiceCollection services) { services.AddOrderService(Configuration.GetSection("OrderService")); services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "NET_Core", Version = "v1" }); }); }
8. 动态配置
public static class OrderServiceExtensions { public static IServiceCollection AddOrderService(this IServiceCollection services, IConfiguration configuration) { services.Configure<OrderServiceOptions>(configuration); //从配置文件读取后,还要再给他加100 services.PostConfigure<OrderServiceOptions>(options => { options.MaxCount += 100; }); services.AddSingleton<IOrderService, OrderService>(); return services; } }
这篇关于.NetCore选项数据热更新的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统