当前位置:首页 > Web开发 > 正文

主机配置是只跟主机相关的配置

2024-03-31 Web开发

标签:

原文:asp.net core 3.x 通用主机道理及使用

一、前言

只是讲asp.net core 3.x通用主机的大抵道理,这些对象是通过检察源码以及本身按照经验总结得来的,在文章中不会深入源码,因为小我私家感受懂道理就晓得扩展点,后期碰到有需求的时候再仔细去研究源码也不迟。
阅读前你应该先去了解下(保举博客园老A的博客):

asp.net core中的依赖注入、

配置,

讲解的方法是:

概述

逐一介绍核心类及扩展方法

凡是我们如何使用

总结

二、概述

技术图片

以前的控制台应用措施、winform措施启动时main首先被执行,后续都是我们本身的代码来实现框架和业务上的东东,好比我们要使用配置就ConfigurationManager.AppSettings... 若想使用依赖注入则需要引入第三方框架,好比autofact。asp.net framework时代也类似

在.net core 3.0之前的版本默认使用的是IWebHost,它内部界说了IOC容器(处事注册表此刻Startup.ConfigServices),和各类配置源的设置(表此刻Program配置主机时),我们后续的Controler、View、包孕业务代码可以很容易做依赖注入和获取配置信息(包孕运用选项模式)

有时候我们但愿写一个处事,但是这个处事并不是用来做api/web,措置惩罚惩罚http请求的,好比想做一个物联网的后端收罗处事,一直期待远端硬件设备提交实时数据过来,后端进行措置惩罚惩罚。但是又但愿使用asp.net core供给的 配置、依赖注入、日志 和其它成果。后来微软就将asp.net core中的这套对象抽离出来了,叫做通用主机,用来承载任何处事,这些自界说处事中就可以很便利地使用配置、依赖注入、日志、和其它成果。此刻asp.net core只是由通用主机承载的此中一种处事。

2.1、默认情况下主要的实现思路是: 2.1.1、界说(微软界说好的):

界说HOST,它包罗IOC根容器、主机和应用措施的生命周期事件定界说、IHostedService调集(一个实例就是一个处事或者叫应用,asp.net core就是一个这样的实例)

允许挪用方供给一堆委托来向IOC中注册处事、和设置主机和应用的“配置源”

供给向主机添加IHostedService的实现东西的要领

允许挪用方注册主机和应用在启动和遏制阶段触发的相应事件

2.1.2、配置(我们的代码,微软界说很多帮助要领):

创建IHost实例

向Host的IOC容器中注册各类处事

配置主机和应用措施的“配置源

向主机内部添加IHostedService实例(也就是我们最终的处事)

主机和应用的生命周期事件,来实现一些特殊任务

2.1.3、启动阶段(微软界说好的)

上面所谓的配置根基都是通过委托实现的(凡是微软供给的各类扩展要领最终也是执行委托),回调这些委托以设置“配置源”和注册处事

最后遍历启动HostedService

在启动过程中还会回调相应的生命周期事件

2.2、啥是应用?

上面提了几次“应用”,此刻对付主机来说asp.net core框架就是一个应用、我们上面举例说的"物联网后端处事"是另一个应用。从代码上来说就是一个IHostedService的实现。
主机和应用是一对多的关系,多个应用可以共享主机的信息,如:主机的IOC容器、主机的配置。应用配置。应用固然也可以本身去创建本身的IOC根容器和配置东西

主机配置和应用配置有关系?这两个配置东西都存在于Host中,主机配置是只跟主机相关的配置,应用配置是主机中多个应用共享的配置,如果主机中只有一个应用,那么完全可以拿它做最终的应用配置。此外应用配置包罗主机配置

注意:在理解时要记住我们此刻的目的是讲解通用主机,意思是可以承载你本身界说的处事的主机,别去想什么mvc controller action 路由之类的

三、核心类

下面分袂介绍下主机中的几个核心默认实现类,几乎每个类都有对应的接口,为了缩短篇幅、便于理解就不讲接口了。

3.1、Host

它代表主机,用来宿主(承载)我们应用(一个IHostedService的实现)。
主要包罗:日志、主机和应用的生命周期事件、IOC根容器、主机的选项东西、启动遏制/遏制要领。
接口中只界说了:IOC根容器 + Start + Stop要领
它在Program.Main中被创建、配置和启动

默认实现Microsoft.Extensions.Hosting.Internal.Host,它是一个internal的类,这个主机将来被启动时:

触发主机的WaitForStartAsync事件

逐一启动主机累不的hostedService

触发_applicationLifetime?.NotifyStarted();事件

遏制时就反过来,先逐一遏制hostedService,触发响应事件、最后遏制主机

扩展:

因为默认Host是internal修饰的,所以无法担任

自界说实现IHost;(这不说了,你可以随心所欲)

订阅主机和应用的生命周期事件(实现IHostLifetime、IHostApplicationLifetime并添加到IOC容器)

大部分情况下方法2实现起来更容易也更常见

提一嘴,asp.net core 3.x此刻也是使用的这个默认主机,只是在上面做了根web相关的配置,将不才一篇讲解

3.2、HostBuilder

Host的职责只是完成主机该有的成果,那么它的创建及配置最好此外界说一个类HostBuilder,它是Host的创建器(工厂),我们凡是

在系统启动时(Program.Man)先创建HostBuilder,

然后进行配置(向IOC容器注册处事,设置主机和应用的"配置源"),

最后挪用Build要领生成我们最终的Host

通过接口IHostBuilder源码可以初略看出它(通过委托的方法)供给以下成果

设置主机和应用的“配置源”

配置IOC容器自己

想IOC容器添加处事

按照以后配置创建Host

有个Properties属性,是个字典类型,可以在构建Host的多个法式中通报数据

扩展:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32173.html