1. Dependency Injection là gì?
Dependency Injection (DI – tiêm phụ thuộc) là kỹ thuật thiết kế phần mềm cho phép một đối tượng nhận các thành phần cần thiết từ bên ngoài thay vì tự khởi tạo chúng.
Ví dụ, một lớp OrderService cần sử dụng EmailService để gửi thông báo. Thay vì tự tạo đối tượng EmailService, lớp OrderService sẽ nhận đối tượng này thông qua Dependency Injection.
Cách làm này giúp giảm sự phụ thuộc trực tiếp giữa các lớp, tăng khả năng tái sử dụng và hỗ trợ kiểm thử hiệu quả hơn.
2. Nguyên lý hoạt động của Dependency Injection
DI hoạt động bằng cách chuyển việc khởi tạo và cung cấp đối tượng phụ thuộc cho một thành phần bên ngoài, thường là DI Container.
Có 3 phương thức triển khai phổ biến:
Trong đó, Constructor Injection thường được ưu tiên vì đảm bảo các thành phần bắt buộc được cung cấp ngay khi đối tượng được khởi tạo.
3. Ưu điểm và nhược điểm của Dependency Injection
Ưu điểm:
Nhược điểm:
4. Cách triển khai Dependency Injection hiệu quả
Để áp dụng DI hợp lý, lập trình viên nên:
Ví dụ triển khai DI trong ASP.NET Core:
Đăng ký dịch vụ:
builder.Services.AddScoped<IUserService, UserService>();
Tiêm dịch vụ vào Controller:
public class UserController : Controller
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
}
ASP.NET Core sẽ tự động tạo và cung cấp đối tượng UserService khi khởi tạo UserController.
5. Ứng dụng thực tế của Dependency Injection
Dependency Injection được sử dụng rộng rãi trong các dự án phần mềm, đặc biệt là: