### 依賴注入 Dependency Injection 1. 以 建構子注入、方法注入、屬性注入 * 建構子注入 : 使本身建構子需要傳入更多的參數 * 方法注入 : 需要另外呼叫 * 屬性注入 : 容易有null產生 2. 注入位置較明確,尤其以建構子注入 3. 僅提供介面來注入,可以不用具體認識與依賴外部注入器 4. 較偏向靜態設置,由外部決定注入哪些元件 ### 服務定位器 Service Locator 1. 由用戶主動去呼叫並請求服務 2. 可於任意處呼叫取用服務,方便直觀但較容易有忽略未注意的可能 3. 需直接具體認識並依賴服務定位器 4. 可動態與靜態配置,由內部決定取用哪些元件 ### 個人偏好 不使用依賴注入框架,但在可替換的元件上採用依賴注入的方式。 在取用偏向於服務/工具、不常替換的的外部元件時,使用服務定位器。 ### 參考資料 * [Dependency Injection是什麼?](https://zxuanhong.medium.com/dependency-injection%E6%98%AF%E4%BB%80%E9%BA%BC-ae83f7f87d6d) * [\[轉載\] IoC 容器和 Dependency Injection 模式](https://garyliutw.blogspot.com/2013/06/ioc-dependency-injection_27.html)([原文](https://martinfowler.com/articles/injection.html))