课件和 Demo 地址
https://gitee.com/geektime-geekbang/NET-Core
作者回复: 直接在服务中读取json,就意味着服务依赖了整个配置文件,而服务只应该关注它依赖的部分,因此它应该依赖的是自己的Options。 使用Options另外一个好处是强类型,可以除了可以承载基础类型的数据外,还可以承载Action动作的,意味着你可以为服务配置一些动态逻辑进去。
作者回复: 使用IOptionsMonitor<T>来读取配置,将数据库链接的构造注册为Scope且使用。或者注册工厂方法,类似这样: services.AddScoped<IDbConnection>(provider => new MySqlConnection(Configuration["MySql"])); 这样当配置变化后,后续的请求会读到新配置
作者回复: 将connectionString 获取逻辑写在Builder的逻辑中即可: public static IServiceCollection AddMySqlDomainContext(this IServiceCollection services, IConfiguration configuration) { return services.AddDomainContext(builder => { var connectionString = configuration.GetValue<string>("Mysql"); builder.UseMySql(connectionString); }); }
作者回复: ASP.NET Core类型的项目,调试模式下被优化了
作者回复: 组件并未提供反向变更数据源的能力,从设计上也不建议这么做。 更好的做法是,专门为配置数据源设计修改它的类(或者组件)
作者回复: IOption<>是单例的,它不跟踪配置更新,读不到更新后的值。 IOptionMonitor <>是单例的,它跟踪配置更新,总是读到最新的值。 IOptionSnapshot<>是范围的,它在范围的生命周期中,不会更新,但它会读到范围生命周期创建前的变更。
作者回复: 直接用ILogger记录日志即可,在配置文件配置Console的输出级别