小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

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

ASP.NET Core一般使用Startup類來進(jìn)行應(yīng)用的配置。在構(gòu)建應(yīng)用主機(jī)時(shí)指定Startup類,通常通過在主機(jī)生成器上調(diào)用WebHostBuilderExtensions.UseStartup 方法來指定 Startup類:

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

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

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

Startup構(gòu)造函數(shù)

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

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

因?yàn)橹鳈C(jī)啟動(dòng)時(shí),執(zhí)行順序?yàn)镾tartup構(gòu)造函數(shù) -> ConfigureServices方法 -> Configure 方法。在Startup構(gòu)造函數(shù)執(zhí)行時(shí)主機(jī)只提供了這三個(gè)服務(wù),別的服務(wù)需要在ConfigureServices方法中添加。然后到了Configure方法執(zhí)行的時(shí)候,就可以使用更多的服務(wù)類型了。

ConfigureServices方法

主機(jī)會(huì)調(diào)用ConfigureServices方法,將需要的服務(wù)以依賴注入的方式添加到服務(wù)容器,使其在Configure方法和整個(gè)應(yīng)用中可用。

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

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

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!");
        });
    });
}

每個(gè)Use擴(kuò)展都在請(qǐng)求管道中添加了中間件。配置到請(qǐng)求管道中的中間件都會(huì)調(diào)用它之后的下一個(gè)中間件或者直接將管道短路。

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

在ConfigureWebHostDefaults中直接配置服務(wù)和請(qǐng)求管道

ASP.NET Core還提供了不使用Startup類而能夠配置服務(wù)和請(qǐng)求管道的方式。也可以在ConfigureWebHostDefaults上調(diào)用它提供的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!");
                        });
                    });
                });
            })

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多