.netcore入门34:配置模块、依赖注入、选项模型、日志框架在asp.net core中的关系

环境:

  • window 10x64
  • .net core 3.1

一、配置模块

参考:.netcore入门25:.net core源码分析之配置模块(IConfiguration)

配置模块是.net core中的基石。它有以下几大特点:

  • 不依赖于“依赖注入容器”;
  • 可从六大数据源中抽取配置数据;

    如: Json、命令行、内存、xml、Jni、环境变量

  • 可以为其他模块提供配置数据;

    如:选项模型、日志框架;

涉及到的nuget包:

  • Microsoft.Extensions.Configuration.Abstractions: 抽象定义;
  • Microsoft.Extensions.Configuration:配置模块顶层实现(包含从内存中提取配置);
  • 六大数据源包;

    Microsoft.Extensions.Configuration.Json:从json中提取配置
    Microsoft.Extensions.Configuration.Xml:从xml中提取配置
    Microsoft.Extensions.Configuration.EnvironmentVariables:从环境变量中提取配置;
    Microsoft.Extensions.Configuration.CommandLine:从命令行中提取配置;
    Microsoft.Extensions.Configuration.Ini:从ini文件中提取配置;
    从内存中提取数据(包含在Microsoft.Extensions.Configuration中)

  • Microsoft.Extensions.Configuration.Binder:将配置数据绑定到对象;

二、依赖注入

参考:.netcore入门26:.net core源码分析之依赖注入

依赖注入也是.net core中的基石,但它和配置模块是分开的,互不影响。

涉及到的nuget包:

  • Microsoft.Extensions.DependencyInjection.Abstractions:抽象定义;
  • Microsoft.Extensions.DependencyInjection:依赖容器实现;

三、选项模型

参考:.netcore入门30:.net core源码分析之选项模型(IOption)

选项模型为.net core应用程序提供配置对象,它有以下几大特点:

  • 构建在“依赖注入容器之上”;
  • 数据来源大部分来自于“配置模块”,与“配置模块”一起成为.net core的一对基石;

    虽然是这么相称,但它们之间并无直接的关系。

涉及的nuget包:

  • Microsoft.Extensions.Options: 选项模型本身就这一个包(构建在依赖注入容器之上);
  • Microsoft.Extensions.Options.ConfigurationExtensions:用于和“配置模块”集成,集成后可以从“配置模块”提取数据;

四、日志框架

参考:.netcore入门31:.net core中的日志框架

日志框架定义了.net core应用程序的日志输出规则,是我们开发应用程序的基石,构建在“依赖注入容器”之上。

涉及的nuget包:

  • Microsoft.Extensions.Logging.Abstractions:抽象定义;
  • Microsoft.Extensions.Logging:具体实现;
  • 常见的日志记录提供程序:
    • Microsoft.Extensions.Logging.Console :微软提供,输出日志到控制台
    • Microsoft.Extensions.Logging.Debug :微软提供, 输出日志到调试器的调试窗口
    • log4net:流行第三方日志记录提供程序,需引用 Microsoft.Extensions.Logging.Log4Net.AspNetCore
    • Serilog:流行第三方日志记录提供程序,需引用 Serilog.AspNetCore
    • NLog: 流行第三方日志记录提供程序,需引用 NLog.Web.AspNetCore

五、通用主机

参考:
.netcore入门23:asp.net core源码分析之通用主机
.netcore入门24:asp.net core源码分析之Startup调用时机

上面列举的都可以称之为.net core程序中的基石,在asp.net core框架中它们已经做了集成(使用通用主机将它们封装到了一起),直接看图:
.netcore入门34:配置模块、依赖注入、选项模型、日志框架在asp.net core中的关系