.NET Core开发实战(一)理论知识(XQX)

一、简介

  本章主要讲NetCore依赖注册等

  如需转载请标明出处

二、开发环境介绍

  操作系统:Windows10系统

  开发工具:Visual Studio 2022

  NetCore版本:NetCore5.0

三、启动项目介绍(以ASP.NET Core Web程序为例)

  3.1 Program.cs:程序入口(目前常用的是.ConfigureWebHostDefaults)

    3.1.1:CreateHostBuilder方法:用于构建我们的程序

    

 

 

     3.1.2:执行顺序

    

 

 

 

  3.2 Startup.cs:注册必要组件的操作类

    3.2.1 ConfigureServices方法:往容器里面注入我们的应用组件

    

 

 

     3.2.2 Configure方法:注册我们的中间件,处理HttpContext整个的请求过程的

    

 

 

四、依赖注入  

 

  4.1 组件包

    4.1.1:Microsoft.Extensions.DependencyInjection.Abstractions:抽象包,接口的定义

    4.1.2:Microsoft.Extensions.DependencyInjection:实现包,具体的实现

  4.2 核心类型

    4.2.1:IServiceCollections:负责服务的注册

    4.2.2:ServiceDescriptor:服务注册时的信息

    4.2.3:IServiceProvider:具体的容器,由IServiceCollections类Builder出来

    4.2.4:IServiceScope:子容器的生命周期 

  4.3 注入依赖的位置

    

 

 

   

  4.4 不同生命周期的注入(注:<接口,实现类>)

    

 

 

  4.5 不同的注册方式

    

 

 

  4.6 对象的释放

    4.6.1 继承IDisposable对象:1.容器只负责释放由他创建的对象 2.在容器或者其子容器释放时,释放由其创建的对象

    4.6.2 建议:

      1.避免在根容器获取实现了IDisposable接口的瞬时服务,如下图

      

 

 

    2. 避免手动创建实现IDisposable的对象,应该由容器管理其生命周期

 

五、第三方框架(Autofac)依赖注入 

  5.1 组件包

    5.1.1:Autofac.Extras.DynamicProxy:动态代理包

    5.1.2:Autofac.Extensions.DependencyInjection:实现包,具体的实现

  5.2 注册第三方容器的入口

    

  5.3 声明第三方容器的注册方法

    

 

   5.4 注入方式

    5.4.1 普通的注册

      注册实例

      

      实例获取

      

 

 

    5.4.2 命名注册

      注册实例

      

      实例获取

      

 

 

    5.4.3 AOP

      拦截器的声明

      

      一般注入的格式

      

    5.4.4 子容器

      注册子容器

      

       子容器的使用

      

 

 六、 配置框架

  6.1 组件包

    6.1.1:Microsoft.Extensions.Configuration.Abstractions:配置抽象包

    6.1.2:Microsoft.Extensions.Configuration:配置实现包

  6.2 核心类型

    6.2.1:IConfiguration:表示配置集合的接口,一般的,程序通过获取IConfiguration接口的实例来获取配置

    6.2.2:IConfigurationRoot:IConfiguration的子接口,表示配置的根节点

    6.2.3:IConfigurationSection:IConfiguration的子接口,表示配置的一个节点,包含节点名、节点路径、值等等,配置节点分隔默认是":"

    6.2.4:IConfigurationBuilder:配置建造接口,我们使用它去创建配置对象 

  6.3 核心扩展点

    6.3.1:IConfigurationSource:配置来源接口,IConfigurationSource接口的实现类都很简单,主要用于结合Options创建配置提供者IConfigurationProvider,一般的,它的作用可以认为就是接收参数,然后在创建IConfigurationProvider时将参数传进去。

        但是在读取来自文件的配置时,推荐继承抽象类: FileConfigurationSource,其它的就直接实现 IConfigurationSource 就可以了,然后添加到 IConfigurationBuilder 的配置源中去

    6.3.2:IConfigurationProvider:配置信息的具体提供者,这个就是提供配置的获取、更新等等操作的接口,有两个重要的抽象类:ConfigurationProvider 和 FileConfigurationProvider 

  6.4 内存配置

    6.4.1 实例

    

 

  6.5 命令行配置

    6.5.1 组件包

      6.5.1.1 Microsoft.Extensions.Configuration.CommandLine:配置命令行扩展包

    6.5.1 支持的命令格式

      

    6.5.2 简单实例

      6.5.2.1 输入命令行入参

        

 

      6.5.2.2 输出配置的值

        

 

    6.5.3 命令行替换

      6.5.3.1 命令替换格式

      

 

      6.5.3.2 实例

      

  

  6.6 环境变量配置

    6.6.1 适用场景

      

 

    6.6.2 特性

      

 

    6.6.3 组件包

      6.5.1.1 Microsoft.Extensions.Configuration.EnvironmentVariables:配置环境变量扩展包

    6.6.4 简单实例

      6.6.4.1 配置程序的环境变量(下面提供两种配置方法)

        

 

        

 

      6.6.4.2 输出配置的值

        

 

    6.6.5 获取多层级节点的值(这边的分层建是双下横线“__”)

      

 

    6.6.6 前缀过滤

      

 

 

   6.7 文件配置

    6.7.1 组件包(可以选择应对不同的格式的文件)

      6.7.1.1 Microsoft.Extensions.Configuration.Ini:读取Ini文件

      6.7.1.2 Microsoft.Extensions.Configuration.Json:读取Json文件

      6.7.1.3 Microsoft.Extensions.Configuration.NewtonsoftJson:将 JSON 文件表示为 IConfigurationSource

      6.7.1.4 Microsoft.Extensions.Configuration.Xml:读取XML文件

      6.7.1.5 Microsoft.Extensions.Configuration.UserSecrets:用于添加用户机密配置源的配置扩展

    6.7.2 特性

      

 

    6.7.3 简单实例(配置的读取根前面的相同)

      

 

    6.7.4 配置文件绑定实体

      

 

     6.7.5 监测配置文件的改动

      6.7.5.1 只生效一次

        

 

       6.7.5.2 静态方法监控文件改动

        

  6.8 自定义配置数据源:低成本实现定制化配置方案

    6.8.1 扩展步骤

      实现IConfigurationProvider

      实现IConfigurationSource

      实现AddXXX扩展方法

    6.8.2 简单实例

      6.8.2.1 实现IConfigurationProvider

      

 

 

      6.8.2.2 实现IConfigurationSource

        

 

 

       6.8.2.3 实现AddXXX扩展方法

        

 

       6.8.2.4 将配置注入到容器中

        

 

   6.9 选项框架:服务组件集成配置的最佳实践

    6.9.1 特性

      

 

    6.9.2 设计原则

       

 

     6.9.3 建议

      

     6.9.4 简单实例

      6.9.4.1 定义服务接口

        

 

 

       6.9.4.2 定义实现类

        

 

 

       6.9.4.3 注册

        6.9.4.3.1 正常注册

         

         

        6.9.4.3.2 静态注册

          

 

 

           

 

 

      6.9.4.4 简单调用

        

 

     6.9.5 热更新

      6.9.5.1 热更新代码

      

 

      6.9.5.2 添加每次获取配置文件的处理

        

 

     6.9.6 数据验证 

      6.9.6.1 三种验证方法

        

 

      6.9.6.2 直接注册验证函数

        

 

       6.9.6.3 实现IValidateOptions<TOptions>(更新属性判断)

        

 

         

 

       6.9.6.4 使用Microsoft.Extensions.Options.DataAnnotations(实现验证类)

        

 

         

 

七、日志框架

  7.1 组件包

    7.1.1:Microsoft.Extensions.Logging:日志包

    7.1.2:Microsoft.Extensions.Logging.Console:日志控制台包

    7.1.3:Microsoft.Extensions.Logging.Debug:日志调试控制台包

    7.1.4:Microsoft.Extensions.Logging.TraceSource:日志TraceSource包

  7.2 简单实例

    7.2.1 日志注入

      

 

     7.2.2 修改日志配置

      

 

     7.2.3 打印日志

      7.2.3.1 创建日志对象 打印日志

        

 

      7.2.3.2 添加单例,打印日志

        

 

         

   7.3 日志作用域:解决不同请求之间的日志干扰

    7.3.1 作用域场景

      

 

    7.3.2 简单实例(日志注册跟上面类似)

      7.3.2.1 更改配置文件

        

 

 

       7.3.2.2 使用作用域打印日志

        

 

 

         

 

 

   7.4 结构化日志

    7.4.1 组件包

      7.4.1.1 Serilog.AspNetCore:结构化日志包

    7.4.2 好处

      

 

     7.4.3  简单实例

      7.4.3.1 定义配置

        

 

      7.4.3.2 更改配置文件

        

       7.4.3.3 初始化日志输出等信息

        

 

 

       7.4.3.4 设置程序结束释放日志对象

        

 

 

八、中间件

  8.1 工作原理

    

 

  8.2 核心对象

    8.2.1 IApplicationBuilder:程序对象接口

    8.2.2 RequestDelegate::处理整个请求的委托

    8.2.3 注册中间件的方式

      8.2.3.1 注册默认中间件

        

 

      8.2.3.2 注册委托中间件

        

 

       8.2.3.3 对特定路径指定中间件

        

 

       8.2.3.4 加条件判断的特殊处理

        

 

       8.2.3.5 注入自定义的中间件类

        8.2.3.5.1 声明中间件处理类

          

 

         8.2.3.5.2 声明静态注册方法

          

 

         8.2.3.5.3 注册中间件

          

 

   8.3 异常处理中间件

    8.3.1 异常处理方式

      

 

    8.3.2 异常处理页

      8.3.2.1 系统自带异常处理页(不适合用于生产环境)

        

 

       8.3.2.2 自定义异常处理页

        

 

         

 

 

         

 

 

    8.3.3 IExceptionFilter(异常过滤器:整个MVC发生作用)

      8.3.3.1 声明异常过滤类    

 

 

         

 

 

       8.3.3.2 注册异常过类

        

    8.3.4 ExceptionFilterAttribute(异常过滤特性)

      8.3.4.1 声明异常特性

        

 

 

       8.3.4.2 使用异常特性

        

 

 

   8.4 静态文件中间件

    8.4.1 功能

      

 

    8.4.2 使用静态文件的方法

      

 

 

     8.4.3 对请求进行处理判断指向哪个静态文件

      8.4.3.1 通过rewrite将请求重写到index.html(推荐)

        

 

      8.4.3.2 通过断路由的方式将请求重写到index.html

         

 

 

 九、文件提供程序

  9.1 核心类型

    9.1.1 IFileProvider:用来访问各种文件的提供程序接口

    9.1.2 IFileInfo:文件信息接口

    9.1.3 IDirectoryContents:目录信息接口

 

  9.2 内置文件提供程序

    9.2.1 IFileProvider:物理文件的提供程序

    9.2.2 IFileInfo:嵌入式的文件提供程序

    9.2.3 IDirectoryContents:组合文件的提供程序, 将多个目录组合成一个目录

  9.3 简单实例

    

十、路由与终节点

  10.1 路由注册方式

    

 

  10.2 路由约束

    

 

 

   10.3 链接生成

    

 

  10.4 简单实例(以RouteAttribute方式为例)

    10.4.1 声明WebApi控制器,且配置路由

      

 

 

     10.4.2 注册中间件

      

 

 

   10.5 路由约束

    10.5.1 类型约束

      

    10.5.2 范围约束

      

    10.5.3 正则表达式

      

    10.5.4 是否必选

      

    10.5.5 自定义IRouteConstraint

      10.5.5.1 声明约束类

        

 

      10.5.5.2 注册约束(也可不注册,不注册根据类名使用)

        

 

      10.5.5.3 使用约束

        

 

  10.6 链接生成

    10.6.1 LinkGenerator

      

    10.6.2 IUrlHelper

       

 

 

 

                                                        XQXBBD

 

 

 

 

    

  

 

 

 

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

     

 

 

 

 

   

 

 

 

 

 

 

 

 

        

 

 

 

 

 

 

    

 

   

 

  

 

 

        

 

posted @ 2022-05-28 17:37  问渠哪得清如许-修  阅读(291)  评论(0)    收藏  举报