- Startup建構式
- ConfigureServices方法
- Configure方法
- 在ConfigureWebHostDefaults中直接配置服務和請求管道
ASP.NET Core一般使用Startup類來進行應用的配置,在構建應用主機時指定Startup類,通常通過在主機生成器上呼叫WebHostBuilderExtensions.UseStartup
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Startup類中可以包含以下方法:
- Startup建構式
- ConfigureServices方法,可選
- Configure方法
Startup建構式
在3.1中,使用泛型主機 (IHostBuilder) 時,Startup建構式中只能注入這三種型別的服務:IWebHostEnvironment、IHostEnvironment、IConfiguration,
嘗試注入別的服務時會拋出InvalidOperationException例外,
System.InvalidOperationException: 'Unable to resolve service for type '***' while attempting to activate '_1_Startup.Startup'.'
因為主機啟動時,執行順序為Startup建構式 -> ConfigureServices方法 -> Configure 方法,在Startup建構式執行時主機只提供了這三個服務,別的服務需要在ConfigureServices方法中添加,然后到了Configure方法執行的時候,就可以使用更多的服務型別了,
ConfigureServices方法
主機會呼叫ConfigureServices方法,將需要的服務以依賴注入的方式添加到服務容器,使其在Configure方法和整個應用中可用,
ConfigureServices方法的引數中無法注入除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 方法引數中的IApplicationBuilder不需要在服務容器中注冊就可使用,它已由主機創建好并直接傳遞給了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方法引數中,可以根據自己的需要注入像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!");
});
});
});
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/54808.html
標籤:.NET Core
