随笔分类 - 【009】.NET Core 开发实战
摘要:20 | 结构化日志组件Serilog:记录对查询分析友好的日志 之前讲解的日志框架,记录的日志都是文本,而且是非结构化的,这样一串串文本实际上不利于我们去做分析 结构化的日志它的好处就显而易见,它可以让我们更易于去检索,更易于与现有的分析系统进行结合 结构化日志的主要场景: 1、实现日志告警 2、
阅读全文
摘要:19 | 日志作用域:解决不同请求之间的日志干扰 开始之前先看一下上一节的代码 // 配置的框架 var configBuilder = new ConfigurationBuilder(); configBuilder.AddCommandLine(args); configBuilder.Add
阅读全文
摘要:18 | 日志框架:聊聊记日志的最佳姿势 除了使用 CreateLogger 指定 logger 的名称,实际上还可以借助容器来构造 logger,通常情况下我们会定义自己的类 namespace LoggingSimpleDemo { public class OrderService { ILo
阅读全文
摘要:18 | 日志框架:聊聊记日志的最佳姿势 日志框架必要的包: 1、Microsoft.Extensions.Logging 2、Microsoft.Extensions.Logging.Console 3、Microsoft.Extensions.Logging.Debug 4、Microsoft.
阅读全文
摘要:17 | 为选项数据添加验证:避免错误配置的应用接收用户流量 三种验证方法 1、直接注册验证函数 2、实现 IValidateOptions 3、使用 Microsoft.Extensions.Options.DataAnnotations 延用上一节代码 需要添加验证的时候不能用 Configur
阅读全文
摘要:16 | 选项数据热更新:让服务感知配置的变化 选项框架还有两个关键类型: 1、IOptionsMonitor 2、IOptionsSnapshot 场景: 1、范围作用域类型使用 IOptinsSnapshot 2、单例服务使用 IOptionsMonitor 通过代码更新选项: IPostCon
阅读全文
摘要:15 | 选项框架:服务组件集成配置的最佳实践 这一节讲解如何使用选项框架来处理服务和配置的关系 选项框架的特性: 1、支持单例模式读取配置 2、支持快照 3、支持配置变更通知 4、支持运行时动态修改选项值 在设计系统的时候需要遵循两个原则: 1、接口分离原则(ISP),我们的类不应该依赖它不使用的
阅读全文
摘要:14 | 自定义配置数据源:低成本实现定制化配置方案 这一节讲解如何定义自己的数据源,来扩展配置框架 扩展步骤 1、实现 IConfigurationSource 2、实现 IConfigurationProvider 3、实现 AddXXX 扩展方法,用来作为注入的快捷方式 引用以下两个包: Mi
阅读全文
摘要:13 | 配置绑定:使用强类型对象承载配置数据 要点: 1、支持将配置值绑定到已有对象 2、支持将配置值绑定到私有属性上 继续使用上一节代码 首先定义一个类作为接收配置的实例 class Config { public string Key1 { get; set; } public bool Ke
阅读全文
摘要:12 | 配置变更监听:配置热更新能力的核心 这一节讲解如何使用代码来监视配置变化并做出一些动作 当我们需要追踪配置发生的变化,可以在变化发生时执行一些特定的操作 配置主要提供了一个 GetReloadToken 方法,这就是跟踪配置的关键方法 接着使用上一节的代码 var builder = ne
阅读全文
摘要:11 | 文件配置提供程序:自由选择配置的格式 文件配置提供程序 Microsoft.Extensions.Configuration.Ini Microsoft.Extensions.Configuration.Json Microsoft.Extensions.Configuration.New
阅读全文
摘要:10 | 环境变量配置提供程序:容器环境下配置注入的最佳途径 环境变量的配置提供程序主要适应场景: 1、在 Docker 中运行时 2、在 Kubernetes 中运行时 3、需要设置 ASP.NET Core 的一些内置特殊配置时 环境变量和命令行这两个提供程序在早期是没有容器化的,当时一个操作系
阅读全文
摘要:09 | 命令行配置提供程序:最简单快捷的配置注入方法 这一节讲解如何使用命令行参数来作为配置数据源 命令行配置(提供程序的)支持三种格式的命令 1、无前缀的 key=value 模式 2、双中横线模式 --key=value 或 --key value 3、正横杠模式 /key=value 或 /
阅读全文
摘要:08 | 配置框架:让服务无缝适应各种环境 配置是应用程序发布到各种环境的必备能力,这一节开始详细讲解 ASP.NET Core 的配置框架 配置框架的核心包有两个,一个抽象包,一个实现包 Microsoft.Extensions.Configuration.Abstractions Microso
阅读全文
摘要:07 | 用Autofac增强容器能力:引入面向切面编程(AOP)的能力 如何获取没有命名的服务呢? // Autofac 容器获取实例的方式是一组 Resolve 方法 var service = this.AutofacContainer.ResolveNamed<IMyService>("se
阅读全文
摘要:07 | 用Autofac增强容器能力:引入面向切面编程(AOP)的能力 这一节讲解使用第三方框架来扩展依赖注入容器 什么情况下需要我们引入第三方容器组件? 大部分情况下,默认的容器组件足够使用 当需要一些非常特殊的场景如下: 1、基于名称的注入:需要把一个服务按照名称来区分它的不同实现的时候 2、
阅读全文
摘要:06 | 作用域与对象释放行为 接下来,把服务切换为单例模式,通过工厂的方式 services.AddSingleton<IOrderService>(p => new DisposableOrderService()); 启动程序,输出如下: 1 2 接口请求处理结束 可以看到代码实际上不会被释放
阅读全文
摘要:06 | 作用域与对象释放行为 作用域主要由 IServiceScope 这个接口来承载 对于实现 IDisposable 类的实例的对象,容器会负责对其生命周期进行管理,使用完毕之后,他会释放这些对象 实现 IDisposable 接口类型的释放: 1、容器只会负责由其创建的对象,如果这个对象是自
阅读全文
摘要:05 | 依赖注入:良好架构的起点 注册完毕之后,想替换某些组件的某些部分时,可以使用 Replace 和 RemoveAll services.AddSingleton<IOrderService>(new OrderService1()); services.Replace(ServiceDes
阅读全文
摘要:05 | 依赖注入:良好架构的起点 除了使用泛型的方式注册服务之外,还有其他的方式 添加一个 OrderService public interface IOrderService { } public class OrderService1 : IOrderService { } public c
阅读全文

浙公网安备 33010602011771号