這個是我在面試中遇到的一道面試題,記錄下來分享給大家。 簡單說ConfigureServices是配置服務器的DI容器,可以添加一些服務進到依賴注入容器中。具體來說就是把中間件等添加到DI容器中,最后都是添加到IServiceCollection中,比如下面的代碼:

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

對于.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在啟動方法中提供需要的任何服務。