DotNetCore学习-2.程序启动
新创建的ASP.NET Core程序中包含两个文件,分别是Program、Startup。其中,Program中Main方法是整个应用程序的入口,该方法如下:
var host = WebHost.CreateDefaultBuilder(args)
.UseKestrel(options => options.AddServerHeader = false)
.UseStartup<Startup>()
.Build();
host.Run();
它的主要作用就是设置使用Kestrel服务器,并设置程序启动类Startup。
严格来说,Startup类需要继承自IStartup接口,但是此处采用契约的方式来实现,及时没有继承自IStartup,UseStartup方法内部也会将该类包装成IStartup接口的实现。
Startup类包括一个属性一个构造函数,两个方法,分别为
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
//set configuration
Configuration = configuration;
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// to do something
public void Configure(IApplicationBuilder application)
{
// to do something
}
}
Startup类中的方法的调用顺序为
Startup构造->ConfigureServices(...)->Configure(...) ASP.NET MVC中的某些功能,需要从IServiceCollection中请求某些服务,而这些服务都需要在接入请求管道之前被加入IServiceCollection中,因此,ConfigureServices函数必须在Configure之前被调用。
- 构造函数中的传入参数
IConfiguration configuration
中包含默认配置文件appsettings.json
中的配置。我们能够通过获取配置的方式得到对应的配置信息。我们也可以在此处获取自定义配置信息。 - ConfigureServices函数的传入参数
IServiceCollection services
,可以将程序中使用的服务使用依赖注入(Dependency Injection)的方式加入到服务容器,这样程序中的其他类就可以获取并使用它。向服务容器中添加服务时,就涉及到服务的生命周期的问题,ASP.NET Core中生命周期的定义包括以下三种:
Transient | 瞬时 | 每次请求时都会创建,适合轻量级,无状态的服务 |
Scoped | 作用域 | 每次请求中只创建一次 |
Signleton | 单例 | 第一次被请求时创建,以后每个后续请求都将使用这个实例 |
- Configure函数的传入参数
IApplicationBuilder application
,用来配置应用程序将如何响应每个HTTP请求。