Dependency Injection Lifetime in ASP .NET Core : Transient, Singleton & Scoped

Trong ASP .NET Core thì việc hiểu rõ việc khởi tạo các services sử dụng DI (Dependency Injection) container là vô cùng quan trọng. Tùy vào từng service và mục đích sử dụng trong ứng dụng khác nhau mà ta sẽ đăng ký với DI container theo các cách khác nhau. ASP .NET Core cung cấp cho ta ba cách



  1. Transient: Instance được khởi tạo mỗi lần tạo service
  2. Scoped: Instance được khởi tạo mỗi scope. ( Scope ở đây chính là mỗi request gửi đến ứng dụng). Trong cùng một scope thì service sẽ được tái sử dụng.
  3. Singleton: Instance của service được tạo duy nhất lúc khởi chạy ứng dụng và được dùng ở mọi nơi.


Để có thể hiểu rõ hơn thì bạn có thể tham khảo ví dụ sau
Công cụ cần thiết
.NET Core SDK
Tải và cài đặt từ trang chủ
https://dotnet.microsoft.com/download

CLI Terminal
Bạn có thể sử dụng bất kỳ CLI nào bạn muốn trên máy Windows của bạn (Command Prompt, Powershell, Git Bash, ...)
Mình thì khuyến cáo các bạn nên dùng PowerShell Core. CLI terminal mới của Microsoft hỗ trợ đa nền tảng.
https://github.com/PowerShell/Powershell

Tạo ASP.NET Core Web API
dotnet new webapi -o DependencyInjectionLifeTimeTest
cd DependencyInjectionLifeTimeTest

Tạo một service đơn giản là in ra unique Guid


Đăng ký các services với container

Khởi chạy và tiến hành kiểm tra
dotnet run
Mở browser và vào địa chỉ theo địa chỉ hiện ra sau khi chạy lệnh ở trên

Ta thấy Id thay đổi cho mỗi Transient.
Trong cùng một request thì Id không thay đổi khi dùng Scoped
Tiến hành refresh hoặc mở cửa sổ mới và vào lại địa chỉ chỉ trên


Giá trị của của Scoped bắt đầu thay đổi nhưng Singleton thì vẫn giữ nguyên.

Tới đây thì chắc bạn đã hiểu rõ vấn đề rồi.

Các bạn tham khảo code mẫu ở đây.

Tham khảo thêm
https://www.tektutorialshub.com/asp-net-core/asp-net-core-dependency-injection-lifetime/

Tiếp tục cập nhật ...