
Dependency Injection
Service lifetime (singleton, scoped, transient), đăng ký service, IServiceProvider, best practices
1Sự khác biệt chính giữa các lifetime Singleton, Scoped và Transient là gì?
Sự khác biệt chính giữa các lifetime Singleton, Scoped và Transient là gì?
Câu trả lời
Singleton tạo một instance duy nhất cho toàn bộ lifetime của ứng dụng, Scoped tạo một instance cho mỗi request HTTP (hoặc scope), và Transient tạo một instance mới mỗi khi được inject. Các lifetime này xác định khi nào và bao nhiêu lần container DI khởi tạo một service. Dùng Singleton cho các service stateless được chia sẻ, Scoped cho các service gắn với request (như DbContext), và Transient cho các service nhẹ không có state.
2Nên dùng lifetime nào để đăng ký DbContext của Entity Framework Core?
Nên dùng lifetime nào để đăng ký DbContext của Entity Framework Core?
Câu trả lời
DbContext nên được đăng ký với lifetime Scoped vì nó không thread-safe và duy trì trạng thái tracking của các entity. Mỗi yêu cầu HTTP cần có instance DbContext riêng để tránh các vấn đề về đồng thời. Việc đăng ký được thực hiện bằng AddDbContext, vốn tự động cấu hình lifetime Scoped. Dùng Singleton sẽ gây lỗi đồng thời, còn Transient sẽ lãng phí tài nguyên do tạo ra quá nhiều instance.
3Làm thế nào để đăng ký một service với một interface và phần triển khai của nó?
Làm thế nào để đăng ký một service với một interface và phần triển khai của nó?
Câu trả lời
Việc đăng ký service được thực hiện bằng các phương thức AddSingleton, AddScoped hoặc AddTransient, chỉ định interface làm kiểu service và lớp cụ thể làm phần triển khai. Cú pháp là services.Add{Lifetime}<IInterface, Implementation>(). Cách tiếp cận này tuân theo nguyên tắc đảo ngược phụ thuộc và giúp việc kiểm thử dễ dàng hơn bằng cách cho phép thay thế phần triển khai. Container DI sẽ tự động phân giải phần triển khai cụ thể khi inject interface.
Trong trường hợp nào nên ưu tiên AddSingleton hơn AddScoped?
Vai trò của IServiceProvider trong hệ thống DI là gì?
+21 câu hỏi phỏng vấn
Các chủ đề phỏng vấn .NET khác
Cơ bản về C#
LINQ & Delegates
Kiến thức cốt lõi ngôn ngữ C#
Kiến thức cơ bản về ASP.NET Core
Vòng đời request trong ASP.NET Core
Configuration & Settings
Vòng đời ứng dụng
Entity Framework Core
Minimal APIs
Phát triển Web API
Async trong ASP.NET Core
Authentication & Authorization
HttpClient & Networking
Tuần tự hóa JSON
Entity Framework Core nâng cao
Các tính năng nâng cao của C#
Clean Architecture
Logging, Monitoring & Observability
Kiểm thử đơn vị & xUnit
Kiểm thử tích hợp
Docker & Containerization
Quản lý gói NuGet
Memory Management & GC
Lập trình phản ứng
Async/await & Mẫu thiết kế
.NET Design Patterns
Tối ưu hóa hiệu năng
Bảo mật & Best Practices
SignalR & Thời gian thực
Kiến trúc Microservices
Nắm vững .NET cho lần phỏng vấn tiếp theo
Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.
Bắt đầu miễn phí