Dependency Injection (DI) 基礎概念

什麼是 DI?

依賴注入(DI)是一種設計模式,讓你不需要手動創建依賴項的實例。相反,你告訴 Angular 你需要什麼,Angular 會:

  • 自動創建實例

  • 管理實例的生命週期

  • 在需要的地方提供這個實例

DI 的好處

  • 避免手動創建實例

  • 確保服務是單例(Singleton)模式,在不同 component 中共享同一個實例

  • 避免狀態不同步的問題(因為使用同一個實例)

如何使用 DI

注入依賴的兩種方式

1. Constructor 注入(傳統方式)

constructor(private taskService: TaskService) { }

2. inject 函數(新方式,Angular 14+)

private taskService = inject(TaskService);

inject 函數的優點:

  • 更簡潔的語法

  • 不需要使用 constructor

  • 特別適合在 standalone components 中使用

1. 在服務類別上使用 @Injectable

@Injectable({
  providedIn: 'root'  // 告訴 Angular 這個服務在整個應用程式中是單例的
})
export class TaskService {
  // 服務的實作...
}

2. 在 Constructor 中注入

constructor(private taskService: TaskService) { }

存取修飾詞說明

  • private: 只能在該類別內部訪問

  • public: 可以在類別內部和外部(包括模板)訪問

  • protected: 只能在該類別及其子類別中訪問

重要觀念

  • Constructor 是在類別被實例化時自動執行

  • @Injectable() 裝飾器讓 Angular 知道這個類別可以被注入到其他類別中

  • providedIn: 'root' 確保服務在整個應用中是單例的

Last updated