ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程解析

ASP.NET Core 是一种开源的、跨平台的、高性能的 Web 应用程序框架。其中 Host.CreateDefaultBuilder 是一个 ASP.NET Core 5.0 的新特性,它提供了一个有用的方法来快速地搭建一个 Web 应用程序的主机。本攻略将详细讲解 ASP.NET Core 5.0 中的 Host.CreateDefaultBuilder 执行过程,并提供两个实例说明。

Host.CreateDefaultBuilder 执行过程

Host.CreateDefaultBuilder 是通过启动类(Program.cs)的默认构造器 Startup 的方法之前来执行的,并将其返回值传递给 Startup。其执行过程包括以下三个步骤:

1. 设置主机配置

第一步是设置主机配置。这一步使用了一个工厂方法 CreateDefaultBuilder,它返回了一个 IHostBuilder 接口的实例,它包含了启动一个应用程序所需要的所有配置信息。代码示范如下:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

在这里我们使用了 ConfigureWebHostDefaults 方法,用于配置主机都需要的一系列操作。

2. 加载配置文件

第二步是加载配置文件。如果当你运行 ASP.NET Core 应用程序时没有传入命令参数,那么应用程序将会默认加载 appsettings.json 文件,这个文件必须放置在项目的根目录下,否则你需要指定其它路径的配置文件。下面是加载配置文件的代码示例:

.ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.SetBasePath(Directory.GetCurrentDirectory());
                    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                    config.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
                    config.AddEnvironmentVariables();
                    if (args != null)
                    {
                        config.AddCommandLine(args);
                    }
                });

上面代码使用了方法ConfigureAppConfiguration,它可以加载不同环境下的配置文件,还可以通过命令行参数来配置(例如:dotnet run --port 5000),以此来满足不同环境下的需求。

3. 配置日志消息

第三步是配置日志消息。ASP.NET Core 在启动时默认加载了一个日志消息模块,用于输出日志消息。在这个步骤中,我们可以自定义日志消息格式、日志存储位置等参数。代码示例如下:

.ConfigureLogging((hostingContext, logging) =>
                {
                   // 配置日志消息记录位置的路径
                    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                   // 配置日志消息格式, 以Console输出日志消息  
                    logging.AddConsole();
                   // 配置日志消息格式, 以Debug输出日志消息
                    logging.AddDebug();
                });

示例说明

我们提供以下两个 ASP.NET Core 5.0 中的 Host.CreateDefaultBuilder 的示例。

示例1: 使用Host.CreateDefaultBuilder托管Console输出

在这个示例中,我们来介绍如何使用Host.CreateDefaultBuilder托管控制台输出。首先,你需要使用 .NET CLI 创建一个新的控制台项目:

dotnet new console --name ConsoleApp

然后,你需要添加以下代码到 Program.cs 文件中,来配置控制台输出:

using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var host = Host.CreateDefaultBuilder(args)
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.AddConsole();
                })
                .ConfigureServices(services =>
                {
                    services.AddTransient<MyService>();
                })
                .Build();

            var myService = ActivatorUtilities.CreateInstance<MyService>(host.Services);
            myService.Run();

            host.Run();
        }
    }

    class MyService
    {
        private readonly ILogger<MyService> _logger;

        public MyService(ILogger<MyService> logger)
        {
            _logger = logger;
        }

        public void Run()
        {
            _logger.LogInformation("Hello, world from MyService!");
        }
    }
}

在上述例子中,我们通过调用静态的方法 Host.CreateDefaultBuilder 来创建了一个默认的主机,并且使用了 ConfigureLogging 方法来配置日志记录位置为控制台输出。在 ConfigureServices 方法中添加了 MyService 类型,并在此类型中通过调用 _logger.LogInformation 方法输出了一条信息。最后,在调用 host.Run() 方法时,我们成功启动并且运行了我们的应用程序。

示例2: 使用Host.CreateDefaultBuilder托管Web应用

在这个示例中,我们来介绍如何使用Host.CreateDefaultBuilder托管 Web 应用。首先,你需要使用 .NET CLI 创建一个新的 Web 项目,我们以 Razor Pages 为例:

dotnet new webapp --name WebApp

然后你需要添加以下配置代码到 Program.cs 文件中,来创建一个默认的主机:

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace WebApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

在这个示例中,我们使用了 ConfigureWebHostDefaults 方法来配置 Web 主机,同时使用了 UseStartup 方法来配置自己的 StartUp 类。

最后,我们需要编写自己的 Startup 类来处理 HTTP 请求和响应。 在 Startup 类中,我们需要添加以下中间件来处理 HTTP 请求和响应:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace WebApp
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });

                endpoints.MapRazorPages();
            });
        }
    }
}

在上述代码中,我们使用了 AddRazorPages 方法将 Razor Pages 中间件添加到服务容器中,并在方法 Configure 中调用了 UseRoutingUseEndpoints 方法来处理 HTTP 请求并返回响应。

结论

本攻略介绍了 ASP.NET Core 5.0 中的 Host.CreateDefaultBuilder 执行过程,并提供了两个示例来说明如何为控制台应用程序和 Web 应用程序创建默认主机。对于了解和学习 ASP.NET Core 5.0 的程序员来说,Host.CreateDefaultBuilder 是一个非常重要且有用的方法,特别是在应用程序的启动阶段。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程解析 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • C#实现FFT(递归法)的示例代码

    关于“C#实现FFT(递归法)的示例代码”的完整攻略,我将为你提供以下内容: 1. 什么是FFT?什么是递归法? 在开始之前,我们先简单了解一下FFT和递归法: FFT是快速傅里叶变换的缩写,是一种对离散信号进行频域分析的方法,常用来处理数字信号和图像处理。 而递归法是指在算法中调用自身函数的技术,把大问题分解成更小的同类问题来解决,每分解一次问题规模就会减…

    C# 2023年6月6日
    00
  • C#使用命名管道Pipe进行进程通信实例详解

    下面我会给出一份完整的“C#使用命名管道Pipe进行进程通信实例详解”的攻略。 1. 什么是命名管道 命名管道(Named Pipe)是一种进程间通信(IPC)的方式,通过以名称命名的管道进行数据交换,起到了进程之间传输数据的作用。 命名管道通过文件系统创建,并且在创建的时候必须指定管道的名称。该名称由一些不包含任何非法字符的字符组成(例如,反斜杠 “\”)…

    C# 2023年6月1日
    00
  • swagger配置正式环境中不可访问的问题

    当我们在开发阶段使用Swagger来管理我们的REST API时,它对于我们进行API测试、API文档编写非常友好。但是在发布到正式环境时,我们需要注意以下几点,避免Swagger配置的API在正式环境中被未经授权的用户访问。 1. 在生产环境中禁用Swagger UI Swagger UI是Swagger的一个核心组件,它用于在浏览器中呈现API文档,并提…

    C# 2023年5月15日
    00
  • 记一次 .NET 某外贸ERP 内存暴涨分析

    一:背景 1. 讲故事 上周有位朋友找到我,说他的 API 被多次调用后出现了内存暴涨,让我帮忙看下是怎么回事?看样子是有些担心,但也不是特别担心,那既然找到我,就给他分析一下吧。 二:WinDbg 分析 1. 到底是哪里的泄露 这也是我一直在训练营灌输的理念,一定要知道是哪一边的暴涨,否则很可能就南辕北辙了,使用 !address -summary 和 !…

    C# 2023年4月24日
    00
  • c# 静态类的使用场景

    下文是关于”C# 静态类的使用场景”的完整攻略。 什么是 C# 静态类 在 C# 中,静态类(Static Class)是指不能被实例化的类,该类中的所有成员都必须是静态的。同时,静态类不能被继承,因此它不能有实例。静态类通常用于封装工具方法,使这些方法可以作为应用程序的公用工具使用。 C# 静态类的使用场景 静态类的主要作用是封装公用的工具方法,以方便其他…

    C# 2023年5月31日
    00
  • C#中dotnetcharting的用法实例详解

    C#中dotnetcharting的用法实例详解 简介 DotNetCharting 是基于 .NET 平台的一个强大的图表绘制组件。它可以帮助开发人员快速地在自己的 Web 应用程序中添加各种类型的图表,如 2D 和 3D 图表、仪表盘、实时图表和地图。DotNetCharting 对于那些需要快速建立强大图表的开发人员来说,是一个非常有用的工具。 安装 …

    C# 2023年6月1日
    00
  • 浅谈C#中的for循环与foreach循环

    浅谈C#中的for循环与foreach循环 介绍 在C#语言中,有两种循环结构:for循环和foreach循环。它们被广泛用于遍历和操作数组、集合等数据结构,也是编写控制流程的重要工具。 本文将详细讲解C#语言中的for循环和foreach循环,并通过示例帮助读者理解它们的使用情景和用法。 for循环 for循环结构在C#中有两种常见写法: 第一种写法 fo…

    C# 2023年6月7日
    00
  • ASP.NET如何自定义项目模板详解

    ASP.NET如何自定义项目模板详解 ASP.NET是一个动态站点开发工具,它可以帮助开发者快速构建Web应用程序。ASP.NET允许开发者自定义项目模板,以便在日常开发中提高工作效率。本文将介绍如何自定义ASP.NET项目模板,以及如何使用自定义项目模板。 1. 创建自定义项目模板 步骤如下: 在Visual Studio中创建一个新的ASP.NET项目。…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部