Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心中的集成依赖项注入能否扫描模块中的依赖项?_C#_Asp.net Core_Dependency Injection_Autofac - Fatal编程技术网

C# ASP.NET核心中的集成依赖项注入能否扫描模块中的依赖项?

C# ASP.NET核心中的集成依赖项注入能否扫描模块中的依赖项?,c#,asp.net-core,dependency-injection,autofac,C#,Asp.net Core,Dependency Injection,Autofac,我有一个主要的ASP.NET核心Web Api项目,它使用多个项目,但我遵循干净的体系结构,所有接口都放在一个核心项目中,有模块项目(基础设施)定义实现。主项目只是引用核心项目,而不了解基础设施 这意味着我们需要扫描模块的依赖关系,并自动将实现与核心项目中定义的相应接口连接起来 更具体地说,假设我有一个接口IA(在核心项目中)和一个实现A(在基础设施中),传统上,如果主项目同时引用这两个接口,我们可以手动注册依赖项,如下所示: public void ConfigureServices(ISer

我有一个主要的ASP.NET核心Web Api项目,它使用多个项目,但我遵循干净的体系结构,所有接口都放在一个核心项目中,有模块项目(基础设施)定义实现。主项目只是引用核心项目,而不了解基础设施

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

更具体地说,假设我有一个接口IA(在核心项目中)和一个实现A(在基础设施中),传统上,如果主项目同时引用这两个接口,我们可以手动注册依赖项,如下所示:

public void ConfigureServices(IServiceCollection services){
   services.AddTransient<IA, A>();
}
public void配置服务(IServiceCollection服务){
services.AddTransient();
}
然而,使用干净的体系结构,我们在设计时只有
IA
可用,在这种情况下,我们如何扫描和连接实现
A


如果ASP.NET核心中的集成依赖项注入无法实现这一点,请向我展示一些替代解决方案(例如
Autofac
)。这里最棘手的部分仍然不是手动注册,而是自动布线(扫描)。谢谢。

应用程序的外壳(ASP.NET核心应用程序,主项目)同时依赖于核心层和基础结构层。它也是构建服务注册的合成根目录

基础设施-取决于核心

壳牌(主要项目)-依赖于核心和基础设施


控制器使用Core中的抽象,但组合根中的注册将基础结构链接到Core。

再创建一个名为dependencyinjection的项目,添加接口和基础结构的引用,并使其成为复合根。在第二步中,将依赖项注入引用到coreweb api,并在startup.cs的configureservices中使用依赖项注入。我理解这一点(请参阅我的示例代码)。但我们并没有通过遵循干净的体系结构在主项目中强烈引用基础设施项目。这就是我要问的问题。请将这些GitHub项目作为干净体系结构和应用程序的示例。请注意,内核和基础结构上都有shell项目。不要过分复杂化。干净的体系结构应该使您的依赖关系更清晰,就像您关注所谓的基础设施一样,您给出的答案忽略了我在问题中清楚描述的所有内容。我不想引用所有的实施项目(我称之为
基础设施项目
)。这里只不过是对同一个单词
infrastructure
的误解(我们之间的差异)。事实上,对同一个词有不同的理解方式,我正试图找到一篇文章,以我理解和分享这个词的方式来谈论这个词,但还没有找到。在这里,我找到了它,你可以参考这本书(从你与我分享的第二个链接——eShopOnWeb)。在第35页,您可以看到它对Clean架构的介绍,这里是最重要的词汇:
…UI和基础架构层都依赖于应用程序核心,但不依赖于彼此(必然)
您可以参考基础架构,但这不一定,在这种情况下,我希望这样。谢谢您,我认为这样可以公平地改变体系结构,我更愿意坚持标准体系结构。我真的知道这是可行的,我只是想知道是否有可能在ASP.NET内核中使用集成的依赖项注入。