今天开始边学边写技术博客。
ASP .NET CORE 3.1为长期维护版本(3年,web技术感觉更新也比较快呢)
学这个跨平台跟物联网啥的有没有关系,目前还不确定。先学一学怎么跨平台再说。
ASP ,net core 核心组件详解
定位:轻松基于http 构建B/S结构的web 应用,并在设计之处就寄去了asp .net 的体系的而经验,进行了重构裁剪使得框架的构建逻辑犹如乐高积木拼装一般,看似简单却又恰到好处。
核心组件的能力与应用场景:(均以microsoft.Extensions为前缀)
1>依赖注入:从容器的角度来看待,依赖注入由容器负责对象的构造,对象所依赖的其他对象由容器负责管理并注入给对象。控制反转是从对象的视角来讲的,指对象把构造自己及其依赖对象的控制权交给容器来管理。
在.NET Core生态中,是由依赖注入组件来实现依赖注入设计模式的,它的设计思路是通过定义类型的生命周期、构造方式等规则配置到容器中,由容器负责管理对象的创建和资源释放。
需要用到DependencyInjection.Abstractions \DependencyInjection两个nuget包;
DependencyInjection的核心类型是serviceDescriptor,serviceCollection\serviceProvider,三者关系如下:
服务描述类ServiceDescriptor;包含服务的类型、生命周期和构造方式等信息。
可以有3种方式获得目标类型(ServiceType)的实例:·
从已有的实例来创建,即ImplementationInstance。·
从指定的类型来动态创建,即ImplementationType。
从指定的工厂方法来动态创建,即ImplementationFactory。
IServiceColletion 与服务注册;IServiceColletion是服务描述类ServiceDescriptor的集合,
通过IServiceProvider获取服务实例;通过BuildServiceProvider方法可以获得服务容器ServiceProvider。
通过ServiceProvider的GetService方法可以获得注册服务的实例。
服务指的是什么??
三种生命周期函数:SCOPED\SINGLETON\TRANSIENT
根容器、子容器??
扩展接口:需要额外的扩展能力比如面向切面编程,采用第三方的库。
在controller中获取服务:使用构造函数参数;·使用HttpContext.RequestServices属性。·使用FromServicesAttribute标注Action的入参。
IDisposable
2>配置:本质上,配置是一种运行时对应用程序行为进行控制的手段。\
配置组件的构造过程:
整个过程如下:·
*创建IConfigurationBuilder。
·*向Builder中添加各种配置源(ConfigurationSource)。
·*通过Build方法构建IConfigurationRoot对象,其内部过程如下:
◇由ConfigurationSource的Build方法创建对应的ConfigurationProvider。
◇将ConfigurationProvider存储在ConfigurationRoot中。
内存配置提供程序
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.Add(new MemoryConfigurationSource{InitialData=configData});
builder.AddInMemoryCollection(configData);
内存配置 内存中集合
为程序提供了与环境无关的特定行为的配置,这在定义应用程序时非常有用。明确定义组件使用的配置值,可以避免组件采用隐含的默认配置,使得应用程序的行为更为明确,代码也更易管理。
命令行配置提供程序
命令行配置提供程序可以轻松地将命令行参数作为配置的数据源。要使用命令行配置提供程序,需要安装NuGet包Microsoft.Extensions.Configuration.CommandLine,并使用如下代码将其注册到IConfigurationBuilder中。
命令行配置提供程序在开发自定义的命令行工具时非常有用,它可以灵活地定义工具的命令参数名称,并且无须在应用程序功能类的内部考虑命令映射关系。
环境变量配置提供程序
在容器化流行的当下,尤其是Kubernetes中,环境变量被广泛使用,这得益于容器的环境隔离能力,使得应用程序运行环境相互独立。使用环境变量作为配置数据源是一个不错的做法。环境变量配置提供程序提供了从环境变量读取配置的能力,因此可以非常轻松地适配容器化环境。
文件配置提供程序 文件(INI\JSON\XML)
key-per-file配置提供程序(目录文件)
使用Iconfiguration 读取配置
使用强类型接收配置
配置提供程序的典型顺序为:
- 文件(appsettings.json、appsettings.{Environment}.json,其中 {Environment} 是应用的当前托管环境)
- Azure 密钥保管库
- 用户机密 (Secret Manager)(仅限开发环境中)
- 环境变量
- 命令行参数
通常的做法是将命令行配置提供程序置于一系列提供程序的末尾,以允许命令行参数替代由其他提供程序设置的配置。
3>选项:
4>中间件:
5>路由:
日志:默认的ASP .net core web 应用模板,使用通用的主机,调用CreateDefaultBuilder,将添加控制台、调试、eventsource、eventlog(仅限Windows)
-参考书目《深入浅出asp .net core》
-《ASP. net core 从入门到实战》
-W3C ASP.NET Core 中的配置_w3cschool
学习无止境