iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
自我挑戰組

打造自己的Medium系列 第 11

Day11 ASP.NET Core 依賴注入

  • 分享至 

  • xImage
  •  

依賴注入(dependency injection)

平常我們寫程式時,如果需要用到一個服務,會自己用new,建一個新的實例。

那依賴注入的用途?

想像一下負責做漢堡的員工A,跑去前台點餐:
A: "我要來份大麥克"
收銀員:"87號餐點好了"
這個時候A就在想:"太棒了,不用自己做,就可以拿到漢堡"

就像點餐那樣,只要事先跟系統宣告,它會自動幫你建好新的實例,不需要再額外寫new,並且透過註冊的方式,去管控服務的生命週期。

服務生命週期(service lifetime)

當你使用依賴注入註冊一個服務時,你要告訴系統:「這個服務物件要活多久?」

你要保存期限三個月的漢堡,還是保存期限一小時的漢堡?

ASP.NET Core 提供三種內建的生命週期:

  1. Singleton(單例)
    整個應用程式只建立一次,大家都共用同一個實例,適用於不會變動、初始設定讀取。
services.AddSingleton<IMyService, MyService>();
  1. Scoped(作用域)
    每一次「請求」會建立一個新的實例,適用於從資料庫撈資料。
services.AddScoped<IMyService, MyService>();
  1. Transient(暫時)
    每次使用,都新建一個實例,適用於輕量、沒有狀態的服務。
services.AddTransient<IMyService, MyService>();

補充

不知道有沒有人會注意到,之前提供範例的時候寫的是

services.AddScoped<UserService>();

為什麼上面的都有interface呢?

這裡interface的角色,相當於一組規範,讓不同類別可以方便替換、降低耦合。
先告訴這系統,這個服務有甚麼功能,但是實際怎麼做不管

我的漢堡要有兩片麵包和中間的餡料
麥香雞可以,麥香魚也可以

作者的哈拉

今天的內容跟開發進度比較沒關係...
畫面感覺花很多時間呢/images/emoticon/emoticon04.gif


上一篇
Day10 會員/非會員的文章顯示
下一篇
Day12 文章
系列文
打造自己的Medium30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言