7.6 — 4. Registering Services
Summary
Sáu cách đăng ký, mỗi cách cho một tình huống. Cách cơ bản (AddScoped<IFoo, Foo>()) phủ 90% trường hợp; phần còn lại là nơi mọi người vấp. Factory registration cho khởi tạo cần logic — và ở đây có bẫy: sp bạn nhận được là provider của scope đang xin, nên resolve một service Scoped bên trong factory của một Singleton là captive dependency, chỉ khác là container không phát hiện được. Open generic cho phép một dòng đăng ký phục vụ mọi IRepository<T>. Và nhiều implementation cùng interface là tính năng, không phải lỗi: container sẽ tiêm cả tập vào IEnumerable<IFoo>.
Mục tiêu bài học
Sau bài này bạn có thể:
- Chọn đúng dạng đăng ký cho từng tình huống khởi tạo.
- Viết factory registration mà không tạo captive dependency ẩn.
- Đăng ký open generic và biết giới hạn của nó.
- Tiêm một tập implementation qua
IEnumerable<T>. - Viết decorator bằng container .NET thuần.