[Programming] 一分鐘了解 IOC, DI


Posted by mike-hsieh on 2023-11-14

最近因使用.net framework,需要自己使用容器,也可能需要跟同仁分享該專案的技術,所以特地複習了一下 IOC, DI,單純以概念的方式做紀錄。

其實IOC, DI本就是同個意思,不過解釋的方式不同,IOC是一種設計思維,而DI像是解釋、實作IOC。


IOC 控制反轉 (Inversion of Control)

一句話解釋: 反轉了依賴對象的控制權

控制反轉(IOC)就像是在廚房裡烹飪的過程中,你不需要自己準備工具和材料。相反的:

  1. 有一個助手(IOC框架/容器)會在你開始烹飪前就把所有你需要的東西(組件/服務)通通準備好,不僅工具、調味料、食材...等等,連工具使用時間、食材的鮮度(組件/服務生命週期)都幫您管理好。
  2. 當你需要它們的時候,它們就已經放在你的工作台上了。這樣,你就可以專注於烹飪(業務邏輯),而不是尋找和準備工具和材料。

IOC(控制反轉)就像是餐廳的管理原則(設計思想),它決定不是大廚去備料,而是助手應該主動提供食材給大廚。確保大廚不需要管理這些資源,就可以取得需要的一切,並且更專注於完成當前的工作。

總結: 控制反轉(IOC)是一種設計思想,將設計好的物件的控制權統一交由容器管理, 避免當前的物件直接控制要依賴的物件。確保你有你需要的一切來完成你的工作,而不需要你自己去管理這些資源。


DI 依賴注入 (Dependency Injection)

一句話解釋: 你依賴於某些東西,而DI框架負責注入這些東西給你

延續上面的故事:
大廚: 代表一個應用程序,比如一個類或者一個函數,它需要一些工具或者資源來完成工作。
助手: 代表DI框架的依賴注入容器,它的職責是提供你所需要的東西,如食材或廚房工具。
食材和工具: 代表了依賴項,比如數據庫連接或服務。

在這個比喻中,條列出以下幾點:

  1. “大廚” 依賴於 “食材和工具”來完成烹飪。
  2. “助手”注入了這些依賴項到你的工作空間,這樣你就可以使用它們。
  3. 這過程中,“助手”把你需要的東西帶到你面前,你無需直接去拿。

總結: 這就是依賴注入的本質——你依賴於某些東西,而DI框架負責注入這些東西給你。


#IOC #DI #dependency injection #Inversion of Control







Related Posts

深入學習 LSD-SLAM-1

深入學習 LSD-SLAM-1

Day 173, 174

Day 173, 174

搭配Windows工作排程, 讓Python自動執行

搭配Windows工作排程, 讓Python自動執行


Comments