Là một mẫu thiết kế giúp giảm bớt sự ràng buộc giữa các thành phần và làm cho mã nguồn trở nên linh hoạt hơn. Có ba loại dependency injection:

  1. Constructor: ta truyền dependency vào tham số của constructor.
  2. Property: ta thiết lập dependency là giá trị của các thuộc tính.
  3. Method: truyền dependency vào tham số của các phương thức.

Ưu điểm:

  • Cải thiện khả năng kiểm thử của mã nguồn: chúng ta có thể truyền dependency vào một component để test component đó.
  • Mã nguồn linh hoạt hơn: có thể sửa đổi hoặc thay thế các component mà không làm ảnh hưởng đến các phần còn lại của ứng dụng.

Ví dụ constructor injection:

class BookService {
  private db: DatabaseConnection // Database connection object
 
  constructor(db: DatabaseConnection) {
    this.db = db
  }
}

Resources