依賴注入

在軟件工程中 ， 依賴注入 （ dependency injection ， 縮寫爲 DI ） 是一種軟件設計模式 ， 也是實現控制反轉的其中一種技術 。 這種模式能讓一個物件接收它所依賴的其他物件 。 “ 依賴 ” 是指接收方所需的對象 。 “ 注入 ” 是指將 “ 依賴 ” 傳遞給接收方的過程 。 在 “ 注入 ” 之後 ， 接收方纔會調用該 “ 依賴 ” 。 此模式確保了任何想要使用給定服務的物件不需要知道如何建立這些服務 。 取而代之的是 ， 連接收方物件 （ 像是 client ） 也不知道它存在的外部代碼 （ 注入器 ） 提供接收方所需的服務 。 注 ： 編程語言層次下 ， “ 接收方 ” 爲對象和 class ， “ 依賴 ” 爲變量 。 在提供服務的角度下 ， “ 接收方 ” 爲客戶端 ， “ 依賴 ” 爲服務 。 該設計的目的是爲了分離關注點 ， 分離接收方和依賴 ， 從而提供松耦合以及代碼重用性 。 傳統編程方式 ， 客戶對象自己創建一個服務實例並使用它 。 這帶來的缺點和問題是 ： 如果使用不同類型的服務對象 ， 就需要修改 、 重新編譯客戶類 。 客戶類需要通過配置來適配服務類及服務類的依賴 。 如果程序有多個類都使用同一個服務類 ， 這些配置就會變得複雜並分散在程序各處 。 難以單元測試 。 本來需要使用服務類的 mock 或 stub ， 在這種方式下不太可行 。 依賴注入可以解決上述問題 ： 使用接口或抽象基類 ， 來抽象化依賴實現 。 依賴在一個服務容器中註冊 。 客戶類構造函數被注入服務實例 。 框架負責創建依賴實例並在沒有使用者時銷燬它 。