Dependency Injection (DI) có nhiều ưu điểm hơn Singleton, ở một số ý sau:
- Dễ dàng thay thế: Singleton thì lúc nào cũng chỉ có thể truy xuất 1 Object duy nhất, không thay thể bằng cái khác được. Với DI có thể thay thế bằng object khác tại thời điểm run-time.
- Linh hoạt: Singleton thì luôn chỉ có một Object. Với DI có thể dùng riêng từng thể hiện cho mỗi Object hoặc một thể hiện dùng chung cho nhiều Object.
- Kế thừa: Singleton thì không thể thừa kế. Với DI thì không giới hạn.
Một nhược điểm của DI so với Singleton là chi phí khởi tạo lớn hơn, do sử dụng Reflection để truy xuất các property trong object.
Với các hệ thống lớn, phức tạp, có khả năng thay đổi, mở rộng thì nên dùng DI. Với những trường hợp object muốn truy xuất được sử dụng ở khắp mọi nơi trong dự án, ở khắp các tầng trong hệ thống có thể sử dụng Singleton.