依賴注入(Dependency Injection)
在asp.net core DI框架 提供了一種在一個地方設置各種類等的方法,然後
在應用中任何地方使用它們。
例如,假設您想從您的一個控制器發送一封電子郵件。
您可以在控制器本身中編寫所有電子郵件發送代碼,
但這會使您的控制器很快變得臃腫,並且還使它負責不止一項工作;即:
處理傳入的請求並返迴響應
發電子郵件!
如果我們到處都這樣做,我們最終會得到非常長的控制器,並且幾乎沒有機會在我們的應用程序中重用關鍵代碼(當我們想從其他地方發送不同的電子郵件時會發生什麼?)
最好是使用該電子郵件發送代碼並將其拉出到自己的服務中(換言之,將其放入另一個類)。
public class Email {
public void Send(string to, strong from, string subject){
// send email here
}
}
已經將電子郵件發送邏輯巧妙地封裝在一個類中
如何在控制器中使用它呢?
這時就需要藉由"依賴注入"
如果我們使用內置的 ASP.NET 核心 DI 框架註冊我們的類,我們可以通過C#該服務類別建構子
自動將它帶入我們的控制器
public class MyController {
private Email email;
public MyController(Email email){
this.Email = email;
}
public IActionResult SendEmail(string to, string from, string subject){
email.Send(to, from, subject);
}
}
由於我們使用的 EF Core,也可以藉由 DI 引入我們的DB上下文。
public class ProductService {
private readonly StoreContext dbContext;
public ProductService(StoreContext dbContext){
this.dbContext = dbContext;
}
}
更詳細DI觀念可參考
Dependency Injection原理與實踐(一)
https://coolmandiary.blogspot.com/2020/11/dependency-injection.html