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