Mi scuso se questa sembra l'ennesima ripetizione della domanda, ma ogni volta che trovo un articolo riguardante l'argomento, si parla principalmente di DI. Quindi, ottengo DI, ma sto cercando di capire la necessità di un contenitore IoC, in cui tutti sembrano entrare. Il punto di un contenitore IoC è davvero solo per "auto-risolvere" l'implementazione concreta delle dipendenze? Forse le mie classi tendono a non avere più dipendenze e forse è per questo che non vedo il grosso problema, ma voglio essere certo di capire l'utilità del contenitore correttamente.
In genere interrompo la mia logica di business in una classe che potrebbe essere simile a questa:
public class SomeBusinessOperation
{
private readonly IDataRepository _repository;
public SomeBusinessOperation(IDataRespository repository = null)
{
_repository = repository ?? new ConcreteRepository();
}
public SomeType Run(SomeRequestType request)
{
// do work...
var results = _repository.GetThings(request);
return results;
}
}
Quindi ha solo una dipendenza, e in alcuni casi potrebbe avere un secondo o un terzo, ma non così spesso. Quindi tutto ciò che chiama questo può passare il suo repository o permetterlo di usare il repository predefinito.
Per quanto riguarda la mia attuale comprensione di un contenitore IoC, tutto ciò che fa il container è la risoluzione di IDataRepository. Ma se è tutto ciò che fa, allora non vedo un sacco di valore in esso poiché le mie classi operative già definiscono un fallback quando nessuna dipendenza è passata. Quindi l'unico altro beneficio che posso pensare è che se ho diverse operazioni come questo usa lo stesso repository di fallback, posso cambiare quel repository in un posto che è il registro / factory / container. E questo è grandioso, ma è così?