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

时间:2020-04-15 14:43:40

标签: asp.net-core dependency-injection asp.net-core-mvc solid-principles

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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

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

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

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

关于标题问题,依赖注入是一种简化依赖实例化的方法,因为它将是框架本身在做“肮脏的工作”。