ASP.NET Core中集成的依赖注入是否可以扫描模块中的依赖关系?

时间:2019-05-18 01:15:40

标签: c# asp.net-core dependency-injection autofac

我有一个主要的ASP.NET Core Web Api项目,该项目消耗多个项目,但是我遵循Clean Architecture,所有接口都放在一个核心项目中,还有定义实现的模块项目(基础结构)。主项目仅引用核心项目,而无需了解基础结构。

这意味着我们需要扫描模块的依赖关系,并通过核心项目中定义的相应接口自动连接实现。

更具体地说,假设我有一个接口IA(在核心项目中)和一个实现A(在基础结构中),传统上,如果主项目都引用了两者,我们可以像这样手动注册依赖项:

public void ConfigureServices(IServiceCollection services){
   services.AddTransient<IA, A>();
}

但是对于干净的体系结构,在设计时我们只有IA可用,在这种情况下,我们如何扫描和连接实现A

如果ASP.NET Core中集成的依赖项注入无法实现,请您告诉我一些替代解决方案,例如Autofac。仍然最棘手的部分不是手动注册,而是自动自动接线(扫描)。谢谢。

2 个答案:

答案 0 :(得分:1)

再创建一个项目,称为dependencyinjection,添加接口和基础结构的引用,并使其成为复合根。在第二步中,将依赖注入的引用提供给coreweb api,并在startup.cs的configureservices中使用依赖注入。

答案 1 :(得分:0)

应用程序的外壳(ASP.NET Core应用程序,主项目)取决于Core和Infrastructure层。这也是您构建服务注册的组成根。

基础架构-取决于核心

Shell(主要编)-取决于核心和基础架构

您的控制器使用Core中的抽象,但是在您的合成根目录中的注册将基础结构链接到Core。