Tôi đã tái cấu trúc một hệ thống hiện có để sử dụng phương pháp tiêm phụ thuộc và công việc đó đã diễn ra suôn sẻ.
Sau một thời gian, tôi nhận thấy rằng một số lượng lớn các thư viện nội bộ đã trở nên phụ thuộc vào khung DI tôi đã sử dụng. Kết quả là toàn bộ dự án hiện phụ thuộc vào khuôn khổ của bên thứ ba này.
Tôi thấy một sự trớ trêu trong việc tách rời tất cả các phụ thuộc bằng cách làm cho chúng phụ thuộc vào một thư viện chia sẻ.
Phản ứng đầu tiên của tôi là tạo ra một thư viện bao bọc xung quanh khung phụ thuộc. Do đó, tôi có thể thay thế khung này nếu cần. Sau khi ước tính công việc liên quan, tôi nhận ra rằng API kết quả sẽ tương tự như khung hiện có và do đó làm cho việc thay thế nó trở nên khó khăn hơn. Thế là tôi từ bỏ ý tưởng.
Mối quan tâm của tôi là khung DI tôi đang sử dụng trở nên lỗi thời hoặc cần thay thế.
Có tồn tại một mô hình phát triển khi làm việc với DI làm giảm sự ghép nối giữa dự án và khung DI không?
DIFramework.Get<IService>()
không thực sự tiêm phụ thuộc; đó là một mẫu liên quan được gọi là Trình định vị dịch vụ. Rất nhiều người không thích Trình định vị dịch vụ vì nó kết hợp bạn với khung và vì nó quá dễ bị lạm dụng (như Singleton). Martin Fowler có một bài viết tuyệt vời về các mẫu này: martinfowler.com/articles/injection.html