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#和Java语言中for和foreach的区别详解

    在C#和Java语言中for和foreach的区别详解 在C#和Java语言中,for和foreach都是循环语句,但在使用方式和效率上有一些区别。下面详细讲解它们的区别。 for循环 for循环是一种常用的循环语句,用于在已知循环次数的情况下重复执行一段代码。其语法如下: for (初始化; 条件; 递增/递减) { //代码块 } for (初始化; 条…

    C# 2023年6月7日
    00
  • 在 C# 中使用 Span 和 Memory 编写高性能代码的详细步骤

    在 C# 中,Span 和 Memory 是用于优化代码性能的关键类型。Span 是一种结构体类型,它将对象内存表示为连续的、可编辑的范围。Memory 则是一个类类型,可以包装一段内存以及操作该内存的方法。使用这两种类型,可以使代码更高效地使用内存和更快地执行。 下面介绍一些使用 Span 和 Memory 编写高性能代码的详细步骤。 步骤一:创建 Spa…

    C# 2023年6月3日
    00
  • 基于C#实现乱码视频效果

    基于C#实现乱码视频效果攻略 背景介绍 乱码视频是一种通过修改视频文件的二进制数据来实现的视频效果,看起来像是视频画面出现了故障、损坏或者失真。这种效果在一些电影、音乐视频和MV中经常被使用,可以让视频更具有艺术感和实验性。本文将介绍如何使用C#编程语言实现乱码视频效果。 实现步骤 了解乱码视频的原理和实现方式:乱码视频通过修改视频文件的二进制数据,使视频画…

    C# 2023年6月6日
    00
  • ASP.NET 谨用 async/await

    ASP.NET是一种在Web应用程序中使用的框架,其中包含了许多可用于编写可执行的应用程序代码的内置功能。其中一个特性是使用async/await异步编程模式。 Async/await允许在Web应用程序中执行耗时长的操作而不会阻塞线程。这是由于该方法异步执行,当操作执行完毕时,将使用已处理请求的线程调用回调。下面是使用async/await在ASP.NET…

    C# 2023年5月15日
    00
  • C# 线程安全详解

    C#线程安全详解 什么是线程安全 线程安全指的是当多个线程同时访问同一个资源时,能够保证程序不会出现并发问题,不会导致数据的不一致或异常情况。 在 C# 中,线程安全一般涉及到以下几种情况: 多个线程同时访问同一个实例方法 多个线程同时访问静态方法 多个线程同时访问字段、属性或变量 线程安全的解决方法 为了保证线程安全,可以采用以下几种方法: 1.使用锁 锁…

    C# 2023年5月15日
    00
  • C#中的let字句应用示例

    C#中的let字句应用是指在Linq查询语句中使用let关键字定义一个中间变量,以便在查询语句中多次使用,并提高代码的可读性和性能。 以下是示例说明: 示例一:使用let字句进行分组并计算平均值 假设我们有一组学生数据,包含姓名、班级和分数三个字段,现在我们想要按照班级对学生进行分组,并计算每个班级的平均分。代码示例如下: using System.Linq…

    C# 2023年6月1日
    00
  • C#使用webbrowser的常见用法实例

    下面是 “C#使用webbrowser的常见用法实例” 的攻略详解。 概述 在 C# 中,WebBrowser 是一个非常有用的控件,它允许我们向程序内嵌一个浏览器以便于在应用程序中显示网页。WebBrowser 常用于开发 Windows 程序,如桌面应用程序、测试工具、爬虫等等。本篇攻略将介绍 WebBrowser 的常见用法实例。 安装WebBrows…

    C# 2023年6月3日
    00
  • C# 脚本引擎CS-Script的使用

    C# 脚本引擎CS-Script的使用 什么是CS-Script? CS-Script是一个用于扩展C#应用程序的开源脚本引擎。它允许您在不编译代码的情况下运行C#脚本,这使得C#脚本可以用于快速手动测试代码、构建脚本和部署小型工具等场合。 安装CS-Script 您可以使用NuGet安装CS-Script。在Visual Studio的“NuGet包管理器…

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