C# DI 輕鬆學 C# DI 輕鬆學 DI 概念 IoC (Inversion of Control) - 控制反轉 定義:IoC 是一種設計原則,將對象的控制權從內部轉移到外部。具體而言,應用程式不再負責控制物件的建立與管理,而是將這些工作交給外部的容器或框架。 作用:通過將控制權反轉,可以讓應用程式更具彈性、更容易測試,並提高可維護性。 舉例: 傳統設計:類別 A 自行建立類別 B 的實例(new 關鍵字)。 IoC 設計:類別 A 的類別 B 由外部容器或框架提供,類別 A 不直接控制物件的建立。 DIP (Dependency Inversion Principle) - 相依反轉原則 定義:DIP 是 SOLID 原則中的一部分,主要指: 高層模組不應該依賴低層模組;兩者應依賴於抽象(介面或抽象類別),處處都介面。 抽象不應該依賴細節;細節應該依賴抽象。 目的:降低模組間的耦合性,使程式更靈活、更易於擴展。 舉例: 壞設計:類別 A 直接依賴類別 B。 好設計:類別 A 依賴於一個介面,由類別 B 實現該介面。 說明: 當使用 MSSQL 建立的 Repository 來存取資料表時,Service 類別會依賴該 Repository 類別進行資料操作。 也就是說,Service 與低層的 Repository 類別存在相依性。然而,假設有一天需要將 Repository 的實現改為使用 NoSQL 來存取資料,此時勢必需要重新改寫 Repository 的實作,而這種改變也會影響到 Service 類別的內部結構, 導致高層模組(Service)與低層模組(Repository)的耦合性過高。 為了解決這個問題,我們可以採用 DIP(依賴反轉原則) 的設計模式。在此模式下,我們會建立一個 IRepository 介面 ,定義高層模組與低層模組之間的契約。Service 類別只依賴於該介面,而不關心具體的...
1. Poetry下任何指令都會出現No Python 問題 PS D:\雜項\python範例> poetry config --list No Python at '"C:\Users\Bryant.lin\AppData\Local\Programs\Python\Python311\python.exe'\ Ans: C:\Users\Bryant.lin\AppData\Roaming\pypoetry\venv\pyvenv.cfg 將內容python的目錄修改,就可以重新執行 home = C:\Users\Bryant.lin\AppData\Local\Programs\Python\Python313 include-system-site-packages = false version = 3.11.3 executable = C:\Users\Bryant.lin\AppData\Local\Programs\Python\Python313\python.exe command = C:\Users\Bryant.lin\AppData\Local\Programs\Python\Python313\python.exe -m venv --clear C:\Users\Bryant.lin\AppData\Roaming\pypoetry\venv