日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ASP.NET Core筆記(1) - 了解Startup類

 小樣樣樣樣樣樣 2021-04-10
  • Startup構造函數(shù)
  • ConfigureServices方法
  • Configure方法
  • 在ConfigureWebHostDefaults中直接配置服務和請求管道

ASP.NET Core一般使用Startup類來進行應用的配置。在構建應用主機時指定Startup類,通常通過在主機生成器上調用WebHostBuilderExtensions.UseStartup 方法來指定 Startup類:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Startup類中可以包含以下方法:

  • Startup構造函數(shù)
  • ConfigureServices方法,可選
  • Configure方法

Startup構造函數(shù)

在3.1中,使用泛型主機 (IHostBuilder) 時,Startup構造函數(shù)中只能注入這三種類型的服務:IWebHostEnvironment、IHostEnvironment、IConfiguration。
嘗試注入別的服務時會拋出InvalidOperationException異常。

System.InvalidOperationException: 'Unable to resolve service for type '***' while attempting to activate '_1_Startup.Startup'.'

因為主機啟動時,執(zhí)行順序為Startup構造函數(shù) -> ConfigureServices方法 -> Configure 方法。在Startup構造函數(shù)執(zhí)行時主機只提供了這三個服務,別的服務需要在ConfigureServices方法中添加。然后到了Configure方法執(zhí)行的時候,就可以使用更多的服務類型了。

ConfigureServices方法

主機會調用ConfigureServices方法,將需要的服務以依賴注入的方式添加到服務容器,使其在Configure方法和整個應用中可用。

ConfigureServices方法的參數(shù)中無法注入除IServiceCollection之外的服務。
具體使用時可以通過IServiceCollection的擴展方法為應用配置各種功能。

public void ConfigureServices(IServiceCollection services)
{

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(
        options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddRazorPages();
}

Configure方法

Configure 方法用于指定應用響應 HTTP 請求的方式。 可通過將中間件組件添加到 IApplicationBuilder 實例來配置請求管道。 Configure 方法參數(shù)中的IApplicationBuilder不需要在服務容器中注冊就可使用,它已由主機創(chuàng)建好并直接傳遞給了Configure方法。
Configure方法由一系列的Use擴展方法組成:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/", async context =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    });
}

每個Use擴展都在請求管道中添加了中間件。配置到請求管道中的中間件都會調用它之后的下一個中間件或者直接將管道短路。

在Configure方法參數(shù)中,可以根據(jù)自己的需要注入像IWebHostEnvironment, ILoggerFactory之類的服務,或者是在ConfigureServices方法中添加到DI容器中的服務。

在ConfigureWebHostDefaults中直接配置服務和請求管道

ASP.NET Core還提供了不使用Startup類而能夠配置服務和請求管道的方式。也可以在ConfigureWebHostDefaults上調用它提供的ConfigureServices和Configure方法。

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureServices((c, services) =>
                {
                    services.AddControllers();
                })
                .Configure(app =>
                {
                    var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();

                    if (env.IsDevelopment())
                    {
                        app.UseDeveloperExceptionPage();
                    }

                    app.UseRouting();

                    app.UseEndpoints(endpoints =>
                    {
                        endpoints.MapGet("/", async context =>
                        {
                            await context.Response.WriteAsync("Hello World!");
                        });
                    });
                });
            })

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多