依賴注入的基礎數據庫
咱們都知道DI,,他是一種開發模式。他是將服務可被應用程序任何位置的代碼使用,當某個代碼組件(如一個類)須要引用某些外部代碼(一個服務)時。都有兩種選擇框架
1:直接在調用代碼種建立服務組件的一個新實例。函數
2:收到該服務的一個有效實例。spa
好比一個操做是記錄操做記錄。那麼看如下代碼。業務邏輯和記錄操做緊密耦合設計
public void Home() { var log=new Logger(); log.Log("Waring"); }
若是該類移動到其餘位置,那麼必須也要移動全部引用和依賴,若是有數據庫操做。那麼使用的地方都要有數據庫鏈接,code
若是解耦orm
private readonly ILogger _logger; public HomeController(ILogger logger) { _logger = logger; } public void Home() { var log=new Logger(); log.Log("Waring"); }
將其抽象爲ILogger 接口,經過構造函數注入。對象
固然若是過分使用依賴注入,那麼會有這樣。依賴的有其餘的依賴。以此類推。blog
可使用DI框架。同時也叫IOC框架接口
var logger=SomeFrameworkIoC.Resolve(typeof(ILogger));
Service Locator模式
鬆耦合調用外部依賴,並不是只有依賴注入。還有Service Locator。它可以建立與指定抽象類型匹配的實例。DI和它的關鍵區別在於,DI要求相應地設計外圍代碼;構造方法與其餘方法的簽名可能會發生變化。而它保守。 可讀性差一點。當龐大的現有代碼庫種重構依賴時,它是一個理想選擇。
以下:
public void Perform() { var logger=HttpContext.RequestService.GetService<ILogger>(); }
這是RequestService對象在HTTP上下文中扮演了Service Locator角色。
固然依賴注入的生命週期。你們想必都有所瞭解。我這裏簡單說一下