在軟體開發的世界裡,我們常聽到「低耦合、高內聚」這句準則,而依賴注入(Dependency Injection,簡稱 DI)正是實踐這個目標的核心技術之一。
什麼是依賴注入?
簡單來說,依賴注入是一種設計模式,它規定:一個物件不應該負責尋找或建立它所需要的其他物件(依賴),而是由外部主動將這些依賴「餵」給它。我們可以拿「餐廳老闆」來做比喻:
- 傳統做法(無 DI):老闆想賣漢堡,得自己去種小麥、養牛、蓋磨坊。老闆(主物件)必須親自參與所有食材(依賴)的生產過程。一旦想換成有機牛肉,老闆就得拆掉牛棚重新來過。
- 依賴注入(有 DI):老闆只需要定義「我需要牛肉與麵包」,然後由專門的「供應商(DI 容器)」直接把食材送到廚房。老闆不需要知道牛怎麼養、麵包怎麼烤,他只需專心把漢堡做好。
為什麼開發者都愛 DI?
- 降低耦合度(Decoupling):物件與依賴之間不再是「生死相依」。當底層邏輯(如資料庫類型)改變時,頂層業務邏輯完全不需要修改。
- 單元測試的救星:如果程式碼寫死了要連接真實資料庫,測試會變得很麻煩。透過 DI,我們可以在測試時注入「假的」資料(Mock),讓測試環境既快速又乾淨。
- 提高程式碼重用性:元件變得像積木一樣,只要接口對了,就能在不同的專案中輕鬆組裝。
常見的注入方式
- 建構子注入(Constructor Injection):最推薦的方式。在物件誕生(建構)的那一刻,就強迫把所有必需品交給它,確保物件一出生就是完整的。
- 屬性注入(Property/Setter Injection):物件先建立,後續再透過設定屬性的方式把依賴塞進去。適合非強制性的選擇性依賴。
結語
依賴注入不僅僅是一種技術技巧,更是一種思維轉變。它讓我們從「親力親為」轉向「定義需求」,讓系統架構變得更像一個靈活的生態系,而非一塊鐵板。












