Veo a los desarrolladores principales escribiendo código como este y al leer el libro de Mark Seemann "Inyección de Dependencia en .NET" Me pregunto si el "nuevo" específico es "extraño", por lo tanto, "Inyección Bastard" ??¿Es este un buen ejemplo del "anti-patrón de inyección Bastard"?
public class SessionInitServiceManager
{
protected readonly ICESTraceManager _traceManager;
protected readonly ILogger _logger;
protected readonly IAggregateCalls _aggregator;
protected readonly IMultiCoreRepository _repository;
public SessionInitServiceManager(ICESTraceManager traceManager,
ILogger logger,
IAggregateCalls aggregator,
IMultiCoreRepository repository)
{
_traceManager = traceManager;
_logger = logger;
_aggregator = aggregator;
_repository = repository;
}
public SessionInitServiceManager() : this(new CESTraceManager(),
new Logger("BusinessServices.authenticateUser"),
new Aggregator(),
new RepositoryFactory().BuildMultiCoreRepository()) { }
Como acotación al margen, cuatro parámetros está empujando el límite de DI sensible (el autor afirma que su límite es generalmente cuatro) porque te obliga a comenzar a cuestionar si SessionInitServiceManager está violando a SRP. Pasar a otra clase de administrador también sugiere que este puede ser el caso. – RichK
Sí, recuerdo haber leído que 3-4 es un límite general. Cualquier buen ejemplo de cómo evitar este nuevo problema con o sin un contenedor de IOC como unity.? –
La respuesta depende de si alguna de las implementaciones 'predeterminadas' están definidas dentro de la misma biblioteca o en una biblioteca diferente ary. http://stackoverflow.com/questions/6733667/is-there-an-alternative-to-bastard-injection-aka-poor-mans-injection-via-defa/6739953#6739953 –