Asp.Net Core 3.1 的发动进程–(5)

Asp.Net Core 3.1 的发动进程--(5)

前语
本文首要讲的是Asp.Net Core的发动进程,协助咱们把握使用程序的要害装备点。

1、创立项目
1.1、用Visual Studio 2019 创立WebApi项目。

这里边能够看到有两个要害的类。 一个Program,一个stsrtup

Program里边有一个Main函数,Main函数里边会调用咱们的CreateHosbuilder这个办法,CreateHosbuilder里边返回了一个IHostBuilder,那么IHostBuilder便是咱们使用程序发动的中心接口

1.2、咱们转到界说看一下IHostBuilder这个接口的界说

这个接口首要有6个办法这里边咱们需求重视的是:ConfigureAppConfiguration、ConfigureHostConfiguration、和ConfigureServices

为了演示整个使用程序的发动进程咱们回到Program,修正CreateHostBuilder 在里边增加一些代码,把办法名打印出来

public class Program

{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
//托付入参是:IConfigurationBuilder
.ConfigureAppConfiguration(builder =>
{
Console.WriteLine("ConfigureAppConfiguration");
})
//入参 IServiceCollection
.ConfigureServices(services =>
{
Console.WriteLine("ConfigureServices");
})
//入参IConfigurationBuilder
.ConfigureHostConfiguration(builder =>
{
Console.WriteLine("ConfigureHostConfiguration");
})
//入参 IWebHostBuilder
.ConfigureWebHostDefaults(webBuilder =>
{
Console.WriteLine("ConfigureWebHostDefaults");
webBuilder.UseStartup<Startup>();
});
}

Starup里边的首要有三个办法 结构行数、ConfigureServices、Configure 相同的打印出来

public class Startup

{
public Startup(IConfiguration configuration)
{
Console.WriteLine("Startup结构函数");
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
Console.WriteLine("Startup.ConfigureServices");
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
Console.WriteLine("Startup.Configure");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}

发动使用程序看看,次序我标示在下面了,Starup里边的是按次序发动的

假如使用程序发动起来没有输出控制台的修正一下发动  挑选项目名称 不要挑选IIS 我在次研讨了半响哈哈

修正一下里边次序看看,能够发现履行的次序与之前稍微不同,便是ConfigureService这一行跑到了Startup.ConfigureServices之后。

2、定论
这些托付注册进去之后都是按必定次序来履行的

整个发动进程分为5个阶段:

2.1、ConfigureWebHostDefaults
这个阶段注册了咱们使用程序必要的几个组件,比如说装备的组件、容器的组件

2.2、ConfigureHostConfiguration
它是用来装备咱们使用程序发动时必要的装备。比如说咱们使用程序发动时所需求的监听的端口、咱们需求监听的Url地址这些。在这个进程咱们能够嵌入一些咱们自己的装备内容注入到咱们的装备的结构中去

 2.3、ConfigureAppConfiguration
是让咱们来嵌入咱们自己的装备文件供使用程序来读取,这些装备将来就会在后续的使用程序履行进程中心每个组件读取

2.4、ConfigureServices、ConfigureLogging、Startup、Startup.ConfigureServices
这些的话都是用交游容器里边注入咱们的使用的组件

2.5、Startup.Configure
是咱们用来注入咱们的中心件,处理HttpContext整个恳求进程的

3、Startup类非必要
Startup这个类其实不是必要的,在Progarm里边也能够装备,

public static IHostBuilder CreateHostBuilder(string[] args) =>

        Host.CreateDefaultBuilder(args)
//入参 IWebHostBuilder
.ConfigureWebHostDefaults(webBuilder =>
{
Console.WriteLine("ConfigureWebHostDefaults");
// webBuilder.UseStartup<Startup>();
webBuilder.ConfigureServices(services =>//对等Startup里边的Startup.ConfigureServices
{
services.AddControllers();
})
.Configure(app =>// 对等Startup里边的Startup.Configure
{
//if (env.IsDevelopment())
//{
//    app.UseDeveloperExceptionPage();
//}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
});
})
//入参 IServiceCollection
.ConfigureServices(services =>
{
Console.WriteLine("ConfigureServices");
})
//托付入参是:IConfigurationBuilder
.ConfigureAppConfiguration(builder =>
{
Console.WriteLine("ConfigureAppConfiguration");
})
//入参IConfigurationBuilder
.ConfigureHostConfiguration(builder =>
{
Console.WriteLine("ConfigureHostConfiguration");
}) ;

这样使用程序相同的能够发动起来 这只是为了标准主张仍是藏着哈哈

记住增加命名空间

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

原文地址 https://www.cnblogs.com/w5942066/p/12803556.html