Tôi đã đọc ở một số nguồn, bao gồm blog 'Ploeh' của Mark Seemann về cách vị trí gốc của thành phần của bộ chứa IoC càng gần càng tốt với điểm vào của ứng dụng.
Trong thế giới .NET, các ứng dụng này dường như thường được coi là các dự án Web, dự án WPF, ứng dụng bảng điều khiển, những thứ có giao diện người dùng thông thường (đọc: không phải dự án thư viện).
Có thực sự đi ngược lại lời khuyên hiền triết này khi đặt gốc thành phần tại điểm vào của dự án thư viện, khi nó đại diện cho điểm vào logic của một nhóm các dự án thư viện và khách hàng của nhóm dự án như đây là công việc của người khác , tác giả nào không thể hoặc sẽ không thêm gốc thành phần vào dự án của họ (dự án UI hoặc một dự án thư viện khác, thậm chí)?
Tôi quen thuộc với Ninject như là một triển khai bộ chứa IoC, nhưng tôi tưởng tượng nhiều người khác làm việc theo cách tương tự để họ có thể quét một mô-đun chứa tất cả các cấu hình ràng buộc cần thiết. Điều này có nghĩa là tôi có thể đặt một mô-đun ràng buộc trong dự án thư viện của riêng mình để biên dịch với đầu ra của dự án thư viện chính của tôi và nếu khách hàng muốn thay đổi cấu hình (một trường hợp không thể xảy ra trong trường hợp của tôi), họ có thể thả một dll thay thế để thay thế thư viện với các mô-đun ràng buộc.
Điều này dường như để tránh các khách hàng phổ biến nhất phải đối phó với các gốc thành phần và nội dung tiêm phụ thuộc và sẽ tạo ra API sạch nhất cho nhóm dự án thư viện.
Tuy nhiên, điều này dường như bay trước sự khôn ngoan thông thường về vấn đề này. Có phải hầu hết các lời khuyên ngoài kia đều đưa ra giả định rằng nhà phát triển cũng có sự phối hợp với sự phát triển của dự án UI, chứ không phải là trường hợp của tôi, trong đó tôi chỉ phát triển thư viện cho người khác sử dụng?