El patrón de diseño Singleton está en desacuerdo con DI. Si bien es posible abrir un Singleton tanto que DI y el Open/Closed Principle comienzan a tener sentido, esto cambiará tanto el Singleton que casi deja de ser un Singleton.
La seguridad de subprocesos es un gran problema que se le viene a la mente cuando comienza a abrir un Singleton.
Es mucho mejor simplemente definir sus servicios y clases sin tener en cuenta su alcance demasiado. Si tiene un objeto que le gustaría compartir entre múltiples consumidores, la mayoría de los Contenedores DI tienen el concepto de vida útil de Singleton, que imita los beneficios del patrón de diseño Singleton sin sufrir ninguno de los inconvenientes.
En resumen: Singletons son malvados y deben evitarse.
Abstract Factory, por otro lado, es muy útil para fines DI.
Singletons es algo que utilizo con bastante frecuencia, pero al leer esto, ¡parece que tendré que cambiar mi estrategia! Encontré que son bastante útiles en ciertas situaciones ... pero puedo ver de dónde vienes en la seguridad del subproceso. –
La seguridad del hilo es una cosa, pero el problema principal es la violación del principio abierto/cerrado. –
Si utilizo un contenedor DI para administrar el alcance de un singleton, ¿por qué es una violación de OCP? Debido a que no confío en los métodos estáticos para la implementación, aún puedo crear una subclase, creo que usar un contenedor DI para singletons me permite preservar el OCP. ? –