什么是 Angular 基于 Constructor Parameter 的 Dependency Injection

简介: 什么是 Angular 基于 Constructor Parameter 的 Dependency Injection

在 Angular 中,依赖注入(Dependency Injection, DI)是一种设计模式,用于处理如何在不同的代码部分创建和传递依赖对象。在 Angular 中,我们通常依赖于 TypeScript 的特性,如构造函数参数(constructor parameters)来执行依赖注入。


构造函数参数进行依赖注入是 Angular DI 系统的一个重要特性。在 Angular 中,任何类(如服务、组件、指令等)都可以作为其他类的依赖项。当 Angular 创建类的实例时,它首先查看类的构造函数以决定该类所需要的依赖项。然后,Angular 会查找这些依赖项,如果找到,就将它们作为参数传递给构造函数,这样就完成了依赖注入。


以下是一个简单的例子,我们创建一个 LoggerService 服务,它有一个 log 方法。然后在 AppComponent 组件中注入这个服务:

import { Injectable } from `@angular/core`;
@Injectable({
  providedIn: `root`,
})
export class LoggerService {
  log(message: string) {
    console.log(`LoggerService: ${message}`);
  }
}
import { Component } from `@angular/core`;
import { LoggerService } from `./logger.service`;
@Component({
  selector: `app-root`,
  templateUrl: `./app.component.html`,
  styleUrls: [`./app.component.css`],
})
export class AppComponent {
  title = `app`;
  constructor(private logger: LoggerService) {
    this.logger.log(`Hello!`);
  }
}


在以上代码中,AppComponent 组件的构造函数有一个参数 logger,其类型为 LoggerService。Angular 通过这个构造函数参数知道 AppComponent 需要一个 LoggerService 的实例。因此,当 Angular 创建 AppComponent 的实例时,它会首先创建一个 LoggerService 的实例(如果还没有的话),然后将这个实例传给 AppComponent 的构造函数。


构造函数参数进行依赖注入的优点:


  1. 代码解耦:通过依赖注入,我们可以轻松地在不同的类之间共享相同的服务实例。这使得代码更加模块化和可重用。
  2. 测试方便:在测试时,我们可以轻松地为依赖项提供模拟对象,这使得单元测试变得更加容易。
  3. 对象的创建和生命周期管理由 Angular 框架处理,开发者可以更专注于业务逻辑的实现。


构造函数参数进行依赖注入的缺点:


  1. 如果依赖关系过于复杂,可能导致代码阅读和维护的困难。
  2. 依赖注入的错误通常在运行时才会被发现,可能会使调试变得困难。
相关文章
|
3月前
|
设计模式 监控 测试技术
Angular 使用 Constructor Parameters 进行依赖注入的优缺点
Angular 使用 Constructor Parameters 进行依赖注入的优缺点
19 0
|
3月前
|
设计模式
Angular 依赖注入领域里 optional constructor parameters 的概念介绍
Angular 依赖注入领域里 optional constructor parameters 的概念介绍
17 0
|
3月前
Angular 依赖注入系统里 Injection token PLATFORM_ID 的使用场景
Angular 依赖注入系统里 Injection token PLATFORM_ID 的使用场景
18 0
|
4月前
|
设计模式 前端开发 JavaScript
Angular 应用开发中 Injection Token 的使用方法介绍
Angular 应用开发中 Injection Token 的使用方法介绍
35 0
|
JavaScript 前端开发
Angular 为什么要引入 injection token 的概念
Angular 为什么要引入 injection token 的概念
110 0
Angular 为什么要引入 injection token 的概念
Angular的constructor和ngOnInit里写代码有什么区别?
Angular的constructor和ngOnInit里写代码有什么区别?
171 0
Angular的constructor和ngOnInit里写代码有什么区别?
Angular应用启动时创建的injection token一览
Angular应用启动时创建的injection token一览
103 0
Angular应用启动时创建的injection token一览
通过一个简单的例子学习Angular Injection Token工作原理
通过一个简单的例子学习Angular Injection Token工作原理
通过一个简单的例子学习Angular Injection Token工作原理
Angular 的 ngOnInit 和 Constructor 的区别!
转载自  http://www.ngui.cc/index.html Constructor 是当类被实例化时,确保在类及其子类字段正确初始化时所执行的类的默认方法。
1250 0
|
25天前
|
设计模式 JavaScript 前端开发
什么是 Angular 应用里的 Custom provider
什么是 Angular 应用里的 Custom provider
24 2

相关产品

  • 云迁移中心