依賴注入原則:
當沒有依賴注入時,需要在A類中創建B類的實例,這樣操作會增加A隱式依賴B類中的依賴。並且A不知道B如何實現才能夠正常工作。使用接口,可以減少這種依賴關係。
1、窮人的依賴注入(Poor Man's Dependency Injection):這個模式不需要任何其他外部依賴就可以實現注入。即在程序的主入口創建所有接口的實現。
2、方法注入:如果只有該方法需要這個依賴時,使用方法參數注入依賴會很好用。從構造函數注入依賴表明類中的多數行爲需要該依賴項,但如果只有少部分方法需要某個依賴,從各個方法參數注入該依賴會更好。(客戶端可以通過構造函數或則方法參數沿着調用棧一直將依賴實例傳遞給需要使用該依賴的目標類。)缺點:方法在調用前必須準備好實例。
3、屬性注入:與方法類似,屬性也可以用於依賴。好處:可以在運行時改變屬性實例值。從構造函數注入的依賴實例在類的整個生命週期內都可以使用,而從屬性注入的依賴實例還能從類生命週期的某個中間點開始啓用。
控制反轉(Inversion of Control):手動構造類實例並把他們傳遞給構造函數的方式實現依賴注入效果,這種方式中實例是靜態的不可改變。控制反轉允許將構建對象圖的動作推遲到運行時。
控制反轉的概念通常都是在控制反轉容器(container)的上下文中實現。控制反轉容器組成的系統能夠將應用程序使用的接口和他的實例類關聯起來,並能在獲取實例的同時解析所有相關的依賴。(Unity控制反轉容器,程序入口初始化UnityContainer實例。注:後期想替換爲其他容器比較困難)
1、註冊、解析、釋放模式
2、命令式與生命式註冊
3、對象的生命週期
連接工廠
負責人模式
工程隔離模式
組合根:
應用程序中只應該有一個位置知道依賴注入的細節,這個位置就是組合根。在使用窮人注入時,就是手動創建構造類的地方,使用控制反轉器時就是註冊接口和實現類間映射關係的地方。(組合根和應用程序入口越近越好,這樣能夠儘快配置好依賴注入。組合根提供了一個查找依賴注入配置的公認位置,能夠避免把對容器的依賴擴散到應用程序的其他地方)
約定優於配置:(網上了解,自己當前不使用,不做了解)