ConfigurationServices
是你的作文根,所以這是你註冊你的服務。膨脹必須去某個地方。您可以在其他圖層中創建擴展方法,並按照需要填充IServiceCollection
然後填充。他們在技術上不是首先在那裏註冊的。當您將擴展方法應用於IServiceColection
您的其他圖層必須參考Microsoft.Extensions.DependencyInjection.Abstractions
才能訪問IServiceCollection
接口。
IMO我不認爲這些擴展方法需要在您的服務或存儲庫層。這些圖層不需要知道它們是如何組成的。如果最終目標是讓啓動類更清潔,那麼您可以輕鬆地將它們放在另一個類的組合根目錄中,並按上圖所示調用它們。或者放入一個單獨的擴展項目,專門針對.net core的DI框架。
服務擴展層
public static IServiceCollection AddMyServices(this IServiceCollection services) {
services.AddScoped<IMyService, MyService>();
//...add other services
}
庫擴展層
public static IServiceCollection AddMyRepositories(this IServiceCollection services) {
services.AddScoped<IMyRepository, MyRepository >();
//...add other services
}
然後在你的作文根ConfigureServices
public void ConfigureServices(IServiceCollection services) {
//...other code
services
.AddMyServices()
.AddMyRepositories();
//...other code
}
UPDATE 根據評論,你可以很容易地調用services.AddMyRepositories()
在AddMyServies
擴展方法,而不是主要的項目本身
public static IServiceCollection AddMyServices(this IServiceCollection services) {
services.AddMyRepositories();
services.AddScoped<IMyService, MyService>();
//...add other services
}
然後在你的作文根,ConfigureServices
將只需要調用AddMyServices
public void ConfigureServices(IServiceCollection services) {
//...other code
services.AddMyServices();
//...other code
}
你必須從某個地方註冊。你談論的膨脹將會在某處。 – Shyju
是的,我知道,但我想註冊我的存儲庫層容器中的存儲庫層中定義的接口。然後我想在服務層容器中註冊在我的服務層中定義的接口,然後另外將存儲庫容器作爲擴展附加到服務層容器,然後最終在MVC項目的配置服務中註冊服務層容器。我知道如何使用Unity做到這一點,但在覈心1.0和內置的Di容器中,我不知道如何做到這一點。 – bilpor
'ConfigurationServices'是你的組合根,所以你註冊你的服務。膨脹必須去某個地方。您可以在其他圖層中創建擴展方法,並定位「ServiceCollection」,然後根據需要進行填充。他們在技術上不是首先在那裏註冊的。他們在組合根目錄中註冊時,您將擴展方法應用於'ServiceConlection' – Nkosi