控制反轉 (IoC)&依賴注入(DI) 是 .NET Core 框架很重要的設計模式,剛開始在接觸 IoC/DI 時,看越多文章就越混亂,後來實際在運用後才慢慢了解其中的概念,這邊就用簡單的筆記跟大家聊聊。
好萊塢法則 => 不要給我們打電話,我們會給你打電話
IoC,是一種 設計原則
,是 物件導向程式設計
中的一種設計原則,來降低類別或模組之間的耦合度
。其中最常見的方式叫做依賴注入
(Dependency Injection,簡稱DI)。
所以簡單來說
IoC 是概念,而 DI 是一種實作方法
分離組件 (Components)
讓雙方都倚賴第三方容器,來降低類別或模組之間的耦合度。把
被依賴物件
注入被動接收物件
中
爬文的時候發現了一個很好的例子
小明是個愛乾淨的人,但他工作時常加班導致房間雜亂,他不能忍受此狀況,所以小明去找一個清潔阿姨每天幫忙他打掃家裡
哪天阿姨哪天有事不能打掃,小明就必須要再去找人來幫忙打掃,由此可知小明耦合阿姨
如果今天是....
小明把他要的條件給「打掃仲介公司」,仲介公司幫他尋找有沒有符合小明需求的打掃阿姨,假如今天A阿姨請假了,仲介公司會自動找另一個符合需求B阿姨幫忙打掃
原本小明依賴阿姨,現在被「仲介公司」做了控制反轉讓「仲介公司」來提供打掃阿姨。
今天小明不用管是否今天有人會來打掃,「仲介公司」會幫小明找到一個掃地阿姨。
「仲介公司」可看作 依賴注入容器
「小明」可看作 被動接收物件
「打掃阿姨」可看作 被依賴物件
實例依賴物件 的 『控制流程 (Control Flow)』,由 主動 變成 被動。
就是 控制反轉 (Inversion of Control)
。
那今天就到這邊囉,大家明天見!