平常我們寫程式時,如果需要用到一個服務,會自己用new,建一個新的實例。
那依賴注入的用途?
想像一下負責做漢堡的員工A,跑去前台點餐:
A: "我要來份大麥克"
收銀員:"87號餐點好了"
這個時候A就在想:"太棒了,不用自己做,就可以拿到漢堡"
就像點餐那樣,只要事先跟系統宣告,它會自動幫你建好新的實例,不需要再額外寫new,並且透過註冊的方式,去管控服務的生命週期。
當你使用依賴注入註冊一個服務時,你要告訴系統:「這個服務物件要活多久?」
你要保存期限三個月的漢堡,還是保存期限一小時的漢堡?
ASP.NET Core 提供三種內建的生命週期:
services.AddSingleton<IMyService, MyService>();
services.AddScoped<IMyService, MyService>();
services.AddTransient<IMyService, MyService>();
不知道有沒有人會注意到,之前提供範例的時候寫的是
services.AddScoped<UserService>();
為什麼上面的都有interface呢?
這裡interface的角色,相當於一組規範,讓不同類別可以方便替換、降低耦合。
先告訴這系統,這個服務有甚麼功能,但是實際怎麼做不管
我的漢堡要有兩片麵包和中間的餡料
麥香雞可以,麥香魚也可以
今天的內容跟開發進度比較沒關係...
畫面感覺花很多時間呢