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请求。
posted @ 2018-07-31 16:39  不一样的程序人生  阅读(490)  评论(0编辑  收藏  举报