ASP.NET Core中的Startup

此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译。其中或许会添加本人对 ASP.NET Core 的浅显理解

          Startup类配置了服务以及app的请求管道。

 Startup类

         ASP.NET Core使用了一个Startup类,按照惯例,其被命名为Startup。Startup类主要包含:

  •          可选的包含了一个ConfigureServices类用以配置应用程序的服务。服务是给app提供功能的可复用组件。服务在ConfigureServices中被注册并且通过DI或者  ApplicationServices在整个app中被消费。
  •          包含一个Configure用来创建app的请求处理管道。

       当app启动时,ConfigureServicesConfigure会被ASP.NET Core运行时所调用:

      

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

         以上的示例代码来源于Razor页面程序,MVC版本的Startup是类似的。

         当app建立宿主时候,便会指定Startup方法。通常我们是在宿主建造器中通过调用WebHostBuilderExtensions.UseStartup<TStartup> 来指定一个Startup的。如下所示:

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>();
            });
}

         宿主提供器服务对于Startup的构造函数来说是可用的。而app通过ConfigureServices来添加额外的服务。然后,宿主提供器服务以及额外添加的服务在Configure中以及整个app中都是可用的。

        当使用Generic Host (IHostBuilder)时候,只有如下的服务类型可以被注入到Startup构造函数中: 

public class Startup
{
    private readonly IWebHostEnvironment _env;

    public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = configuration;
        _env = env;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        if (_env.IsDevelopment())
        {
        }
        else
        {
        }
    }
}

         大部分服务直到调用Configure方法之后才可用使用。

猜你喜欢

转载自www.cnblogs.com/qianxingmu/p/12371076.html