Sử dụng IOC (đảo ngược kiểm soát) thay vì sử dụng đơn đầu tiên khi sử dụng lần đầu tiên cũng có lợi cho các lý do khác.
Singleton-initialisation có thể bị (nổi tiếng) từ các vấn đề đa luồng, trong đó hai chủ đề cố gắng truy cập nó lần đầu tiên cùng một lúc. Truy cập tiếp theo có thể được đồng bộ hóa chính xác nhưng việc đầu tiên khó thực hiện hơn nhiều.
Một ưu điểm lớn khác mà tôi đã tìm thấy khi sử dụng IOC là khi có lỗi xảy ra trong quá trình khởi tạo. Bạn không muốn điều này xảy ra trong "lần sử dụng đầu tiên", bạn muốn biết về sự thất bại này ở giai đoạn đầu và chắc chắn sẽ dễ dàng xử lý lỗi theo cách này. Cuối cùng, liên quan đến thử nghiệm, IOC cung cấp mô hình hoàn hảo để cô lập các thành phần, thay thế chúng khi cần thiết và kết hợp các kết hợp khác nhau một cách linh hoạt hơn, do đó cung cấp khai thác hoàn hảo cho cả thử nghiệm đơn vị và tích hợp cũng như một cơ chế rollback tốt mà không thực sự phải hoàn nguyên bất kỳ mã nào.
Lý do chung thường được sử dụng đơn giản không phải là cho một-ness nhưng cho toàn cầu-Ness. Nếu dự án của bạn được quản lý đúng, bạn có một đối tượng toàn cầu duy nhất mà tất cả những người khác "đăng ký" (do đó mô hình IOC của bạn bị treo) và có sẵn trên toàn cầu trong khi vẫn có thể cấu hình được.
Hoàn toàn đúng - IOC là cách để thực hiện công cụ này –