依賴注入的基礎
我們都知道DI,,他是一種開發模式,他是將服務可被應用程式任何位置的代碼使用,當某個代碼組件(如一個類)需要參考某些外部代碼(一個服務)時,都有兩種選擇
1:直接在呼叫代碼種創建服務組件的一個新實體,
2:收到該服務的一個有效實體,
比如一個操作是記錄操作記錄,那么看以下代碼,業務邏輯和記錄操作緊密耦合
public void Home() { var log=new Logger(); log.Log("Waring"); }
如果該類移動到其他位置,那么必須也要移動所有參考和依賴,如果有資料庫操作,那么使用的地方都要有資料庫連接,
如果解耦
private readonly ILogger _logger; public HomeController(ILogger logger) { _logger = logger; } public void Home() { var log=new Logger(); log.Log("Waring"); }
將其抽象為ILogger 介面,通過建構式注入,
當然如果過度使用依賴注入,那么會有這樣,依賴的有其他的依賴,以此類推,
可以使用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角色,
當然依賴注入的生命周期,大家想必都有所了解,我這里簡單說一下

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57139.html
標籤:其他
上一篇:VS2015發布WEB專案
下一篇:C# monitor keyboard and mouse actions based on MouseKeyHook.
