Tôi hiểu rằng nguyên tắc Injection Dependency là tất cả về mã tách. Thay vì làm mới trường hợp trong các lớp học, thay vào đó bạn tiêm chúng, làm cho chúng lỏng lẻo cùng.Dependency Injection Container vs Mẫu đăng ký
Bây giờ nếu tôi phải truyền một tập hợp các đối tượng sẽ được sử dụng thông qua một số lớp trong ứng dụng của tôi, tôi có thể tạo một thùng chứa (thường được gọi là thùng chứa phụ thuộc).
Đó chính xác là những gì tôi đang làm vì tôi phải truyền đối tượng cấu hình, đối tượng logger, đối tượng dịch, v.v ... sẽ được sử dụng thông qua một số trường hợp của ứng dụng của tôi. Tôi đang chuyển toàn bộ vùng chứa thông qua một số lớp, ngay cả khi không phải tất cả các lớp đều cần truy cập vào tất cả các đối tượng trong vùng chứa. Điều này dẫn tôi đến câu hỏi sau: sự khác biệt là gì nếu tôi tạo một Registry toàn cục và đặt các đối tượng vào đó, sau đó lấy chúng như Registry :: getInstance() -> get ('logger'); ? Mặc dù tôi sử dụng một đăng ký toàn cầu hoặc một thùng chứa phụ thuộc, các thành phần lớp sẽ có quyền truy cập vào tất cả các đối tượng trong vùng chứa hoặc đăng ký, ngay cả khi chúng không cần xem/truy cập tất cả chúng.
Kết luận: Sự khác biệt là gì nếu tôi vượt qua một thùng chứa phụ thuộc tiêm dọc theo các lớp học của tôi hoặc một Cơ quan đăng ký toàn cầu?
Như tôi hiểu nếu bạn đang tiêm container vào lớp, đây là vị trí dịch vụ không phải là sự tiêm phụ thuộc. – Orangepill
thì những gì được gọi là một container tiêm phụ thuộc? – Matthew
Như tôi đã hiểu, Dependency Injection luôn có sự phụ thuộc từ bên ngoài lớp trong khi Service Location có thể xảy ra ở bất cứ đâu. Điều xấu với dịch vụ định vị là họ ẩn những gì phụ thuộc thực sự cho một đối tượng được. – Orangepill