为什么要在我的.net核心项目体系结构中使用依赖项注入?

问题描述 投票:0回答:2

我想详细了解.net Core的DI容器。如果假设我们有一百个类和相应的接口,并且我已经在我的startup.cs文件中注册了所有依赖项。那我的问题是哪一个是真的?a)所有一百个实例将创建启动时间,因为我已经在startup.cs中提到了所有依赖关系。b)仅在构造函数中定义的运行时创建那些实例。

asp.net-core dependency-injection asp.net-core-mvc solid-principles
2个回答
2
投票

这在一定程度上取决于生存期,但是通常会根据需要实例化它们。例如,如果您向控制器中注入某些东西,则在激活该控制器时,将实例化其具有的依赖关系(在构造函数中定义),并实例化那些依赖关系所具有的任何依赖关系,依此类推。一生。它将在第一次需要时实例化,然后很明显地一再重复使用。

总之,不,并非所有100个服务都在应用程序启动时实例化,除非所有100个服务在应用程序启动期间以某种方式使用(导致它们需要实例化)。


0
投票

[基本上,您需要将其想象为在startup.cs文件中注册的服务列表,并将在执行应用程序时相应地使用。

为此,您可以通过构造函数注入来注入它们(例如,(在我看来,是最常用的一种)。这就是说,我们现在可以讨论与它们关联的生命周期。我将简洁地表达它们:

AddSingleton:对于您发出的每个HTTP请求,将始终使用相同的实例,换句话说:始终是从容器注入的相同实例。

AddScoped:每个HTTP请求都实例化一个新服务,但仅在应用程序“不同位置”的该请求范围内使用。

AddTrasient:对于每个HTTP请求,将使用不同的实例,并将不同的实例注入到应用程序的“不同位置”。

关于您的标题问题,好吧,依赖注入是一种简化依赖关系实例化的方法,因为它将由框架本身来完成”肮脏的工作”。

© www.soinside.com 2019 - 2024. All rights reserved.