首页 > Web开发 > 详细

.NET 通用宿主

时间:2020-03-04 12:40:57      阅读:71      评论:0      收藏:0      [点我收藏+]

这篇文章介绍了.NET Core通用宿主,并提供了如何使用它的一些指南。

什么是宿主?

        宿主是封装了app资源的一些对象,比如:

  • 依赖注入(DI)
  • 日志
  • 配置
  • 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来创建和配置一个建造者对象。
  • 在建造者对象上调用Build,Run方法。

       这里是一个非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

默认建造者设置

       CreateDefaultBuilder方法:

  • GetCurrentDirectory方法返回的路径设置目录根。
  • 从下列位置加载目录配置:具有“DOTNET_”前缀的环境变量,命令行参数。
  • 从下列位置加载app配置:appsettings.jsonappsettings.{Environment}.json,当app运行在开发环境中时的Secret Manager,环境变量,命令行参数。
  • 添加如下的日志提供器:Console,Debug,EventSource,EventLog(仅当运行在Windows上)。
  • 当在开发环境中时,启用域验证以及依赖验证。

      ConfigureWebHostDefaults方法:

       本章后续的两个章节Settings for all app types 以及 Settings for web apps 展示了如何重载默认的建造者设置。

框架提供的服务

      自动注册的 服务包含如下:               

     关于框架提供的服务的更多信息,请参考Dependency injection in ASP.NET Core

.NET 通用宿主

原文:https://www.cnblogs.com/qianxingmu/p/12408413.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!