我有一个主要的ASP.NET Core Web Api项目,该项目消耗多个项目,但是我遵循Clean Architecture,所有接口都放在一个核心项目中,还有定义实现的模块项目(基础结构)。主项目仅引用核心项目,而无需了解基础结构。
这意味着我们需要扫描模块的依赖关系,并通过核心项目中定义的相应接口自动连接实现。
更具体地说,假设我有一个接口IA(在核心项目中)和一个实现A(在基础结构中),传统上,如果主项目都引用了两者,我们可以像这样手动注册依赖项:
public void ConfigureServices(IServiceCollection services){
services.AddTransient<IA, A>();
}
但是对于干净的体系结构,在设计时我们只有IA
可用,在这种情况下,我们如何扫描和连接实现A
?
如果ASP.NET Core中集成的依赖项注入无法实现,请您告诉我一些替代解决方案,例如Autofac
。仍然最棘手的部分不是手动注册,而是自动自动接线(扫描)。谢谢。
答案 0 :(得分:1)
再创建一个项目,称为dependencyinjection,添加接口和基础结构的引用,并使其成为复合根。在第二步中,将依赖注入的引用提供给coreweb api,并在startup.cs的configureservices中使用依赖注入。
答案 1 :(得分:0)
应用程序的外壳(ASP.NET Core应用程序,主项目)取决于Core和Infrastructure层。这也是您构建服务注册的组成根。
基础架构-取决于核心
Shell(主要编)-取决于核心和基础架构
您的控制器使用Core中的抽象,但是在您的合成根目录中的注册将基础结构链接到Core。