天天看點

小談startup類ConfigureServices方法的作用

這個是我在面試中遇到的一道面試題,記錄下來分享給大家。

簡單說ConfigureServices是配置伺服器的DI容器,可以添加一些服務進到依賴注入容器中。具體來說就是把中間件等添加到DI容器中,最後都是添加到IServiceCollection中,比如下面的代碼:

services.AddIdentityServer()
		.AddDeveloperSigningCredential()
		.AddInMemoryApiResources(Config.GetResource())
		.AddInMemoryClients(Config.GetClients())
		.AddTestUsers(Config.GetTestUsers())
		.AddProfileService<ProfileService>()
		.AddResourceOwnerValidator<LoginValidator>();           

複制

對于.AddProfileService()來說它已經内置了一個預設實作IProfileService接口的類,預設注入内置的DefaultProfileServer。其實裡面的實作是當遇到IProfileService執行個體化成自定義類ProfileService,而不使用内置的。ASP.NET Core依賴注入在應用程式啟動時提供服務。我們可以通過在Startup類的構造方法或Configure方法中包含适當的接口作為參數來請求這些服務。ConfigureServices方法隻能接受IServiceCollection參數,但是可以從這個集合中檢索任何已注冊的服務,是以不需要額外參數。下面由啟動方法請求的服務:

位置 服務
構造方法中 IHostingEnvironment,ILogger
ConfigureServices方法中 IServiceCollection
Configure方法中 IApplicationBuilder, IHostingEnvironment, ILoggerFactory

Startup類構造方法或Configure方法可以請求由WebHostBuilde ConfigureServices方法添加的任何服務。使用WebHostBuilder在啟動方法中提供需要的任何服務。