ASP.NET Core DI(Dependency injection) 在官方.Net Core 文件裡排在前面幾個介紹的算是.Net Core內建非常精華的功能,來說說這個DI架構的優點吧。
先看一下先前寫的Controller在實體化Service 是怎麼使用的;
在AuthController裡new MemberService被包在建構子裡在使用彈性上較低這樣等於變向AuthController依賴一定需要MemberService,但在使用Service上並沒有太大的問題只是使用DI動態注入會有更佳的彈性。
Service lifetimes
1.Transient: 每次運作碰到執行個體都會實體化一個暫時的個體;適合較輕量化的Service。
2.Scoped:每次用戶的Request時,會把執行個體實體化,實體化後會在這次的Request結束前存在。
3.Singleton:當呼叫到此執行個體時就會被實體化,實體化後會一直存在DI的容器中;可以使用在像是memory cache的Service。
Step 1 – 將需要DI的Service 新增一個Interface; 以MemberService為範例:
Step 2 – MemberService繼承IMemberService interface,要取用 DI 容器內的物件,只要在建構子加入相對的 Interface即可。
Last Step – 在Startup.cs的ConfigureServices註冊相依注入
Conclusion: 透過這次練習實作改變直接在Controller裡new Service的動作,此動作會直接將Service相依在Controller;利用 Dependency injection 動態注入,在Startup 將Service註冊在Interface上 ,在整體而言讓程式之間的耦合性降低了,之後在寫單元測試時也可以輕鬆的使用。
.Net Core Project GitHub:Link
下一遍 : .Net Core Project 從零開始 — Create Web API with Swagger
Source : .Net Core Project 從零開始 —相依性注入 (Dependency Injection)
參考文章