原文:鏈接
Startup.cs的作用:
配置各服務和HTTP請求管道。
Startup類:
ASP.NET Core中使用按慣例Startup
命名的類Startup.cs
:
- (可選)包括ConfigureServices方法以配置應用程序的服務。服務是一個可重用的組件,提供應用程序功能。配置服務 - 也稱為已注冊 -in,
ConfigureServices
通過依賴注入(DI)或ApplicationServices在應用程序中使用。 - 包含一個Configure方法來創建應用程序的請求處理管道。
ConfigureServices
並Configure
在應用程序啟動時由ASP.NET Core runtime調用
public class Startup { // Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { ... } // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { ... } }
Startup在構建app host
時,將為應用程序指定該類。app host這里通常為webHost在Program
類中的 CreateWebHostBuilder上調用時構建的。即調用WebHostBuilderExtensions.UseStartup <TSTARTUP>方法構建:
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }
HostingEnvironment 可作為Startup
類構造函數參數服務,ConfigureServices用來添加其他服務,在ConfigureServices中添加后,相應的服務和應用程序就可以在Configure方法
中使用。
在類中依賴注入的常見用法Startup
是注入:
- IHostingEnvironment按環境配置服務。
- IConfiguration讀取配置。
- ILoggerFactory創建一個日志記錄工具
public class Startup { private readonly IHostingEnvironment _env; private readonly IConfiguration _config; private readonly ILoggerFactory _loggerFactory; public Startup(IHostingEnvironment env, IConfiguration config, ILoggerFactory loggerFactory) { _env = env; _config = config; _loggerFactory = loggerFactory; } public void ConfigureServices(IServiceCollection services) { var logger = _loggerFactory.CreateLogger<Startup>(); if (_env.IsDevelopment()) { // Development service configuration logger.LogInformation("Development environment"); } else { // Non-development service configuration logger.LogInformation($"Environment: {_env.EnvironmentName}"); } // Configuration is available during startup. // Examples: // _config["key"] // _config["subsection:suboption1"] } }
ConfigureServices方法:
在startup.cs中ConfigureServices方法:
- 可選的。
- 在startup
Configure
方法之前由Host調用。 - 當配置選項被設置慣例。
典型的模式是調用所有Add{Service}
方法,然后調用所有services.Configure{Service}
方法。請參閱配置身份服務。
對於需要大量設置的功能,IServiceCollectionAdd{Service}
上有擴展方法。典型的ASP.NET Core應用程序會配置Entity Framework,Identity和MVC注冊服務:
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>() .AddDefaultUI(UIFramework.Bootstrap4) .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); // Add application services. services.AddTransient<IEmailSender, AuthMessageSender>(); services.AddTransient<ISmsSender, AuthMessageSender>(); }
Configure方法
configure方法用於指定應用程序如何響應HTTP請求。通過將中間件組件添加到IApplicationBuilder實例來配置請求管道。IApplicationBuilder
可用於該Configure
方法,但它未在服務容器中注冊。托管創建IApplicationBuilder
並直接傳遞給Configure
。
在ASP.NET核心模板配置與支持的管道:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(); }
每個Use
擴展方法都將一個或多個中間件組件添加到請求管道。例如,UseMvc
擴展方法將Routing Middleware添加到請求管道並將MVC配置為默認處理程序。
請求管道中的每個中間件組件負責調用管道中的下一個組件或者在適當的時候使鏈路短路。如果中間件鏈中沒有發生短路,則每個中間件都有第二次機會在請求發送到客戶端之前處理該請求。
其他服務(例如IHostingEnvironment
和ILoggerFactory
)也可以在Configure
方法簽名中指定。指定后,如果可用,則會注入其他服務。
有關如何使用IApplicationBuilder
和中間件處理順序的更多信息,請參閱ASP.NET核心中間件。