这篇文章介绍了.NET Core通用宿主,并提供了如何使用它的一些指南。
什么是宿主?
宿主是封装了app资源的一些对象,比如:
IHostedService
的实现 当一个宿主启动时,它会首先在DI容器中查找所有的IHostedService实现,然后在每个找到的实现上调用它的IHostedService.StartAsync
方法。在一个web app中,IHostedService
的实现之一便是web 服务器,它启动了一个HTTP server implementation。
将所有app需要的资源包含进一个对象的主要原因便是生命周期管理:在app启动时进行控制并优雅地关闭。
在ASP.NET Core 3.0以前的版本中,Web Host被用来做HTTP工作负载。从ASP.NET Core 3.0开始,Web Host不再推荐为web app所用,其现在仅用作向后兼容。
建立一个宿主
典型的,一个宿主在Program.Main方法里进行配置,建立,运行:
CreateHostBuilder
来创建和配置一个建造者对象。 这里是一个非HTTP工作负载的Program.cs代码,并且将一个IHostedService
实现添加进DI容器中:
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); }
对于一个HTTP工作负载,Main方法是相同的,但是CreateHostBuilder
调用了ConfigureWebHostDefaults
:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
如果app使用了Entity Framework Core,请不要更改CreateHostBuilder
方法的名称以及签名。Entity Framework Core tools这个工具期望找到一个CreateHostBuilder
方法来配置宿主,而不用运行app。更多信息,请参考Design-time DbContext Creation。
默认建造者设置
ConfigureWebHostDefaults
方法:
本章后续的两个章节Settings for all app types 以及 Settings for web apps 展示了如何重载默认的建造者设置。
框架提供的服务
自动注册的 服务包含如下:
关于框架提供的服务的更多信息,请参考Dependency injection in ASP.NET Core。
原文:https://www.cnblogs.com/qianxingmu/p/12408413.html