Supponiamo di avere un servizio che deve essere inizializzato, ma poi è singleton . Ad esempio, qualcosa di simile:
public interface IGraphsContainer
{
void Initialize(IEnumerable<Graph> initialContent);
void Add(Graph graph);
bool Contains(Graph graph);
IEnumerable<Graph> FindAll(Criteria complexCriteria);
}
Supponiamo che l'implementazione non abbia dipendenze. Quindi può essere facilmente associato in un contenitore DI e auto-iniettato in classi che ne hanno bisogno.
Questo funziona per me, aspetto che non debba dimenticare di inizializzare il contenitore prima di usarlo. Ha bisogno di un codice aggiuntivo per impedirlo. Ecco perché non sono felicemente soddisfatto.
C'è una soluzione migliore per questo che non richiede il metodo Initialize?
EDIT: non ero chiaro riguardo al singletion. Il fatto è che è un singleton nel suo ambito, che NON è l'ambito dell'applicazione. Quindi questo metodo di inizializzazione è invocato in qualche altro AbstractFactory.
In questo caso, se i Grafici vengono estratti da una cartella e un utente decide di cambiare la cartella, allora dobbiamo cambiare i grafici in base a quella cartella e quindi il contenuto iniziale dei contenitori.
Ecco il vero esempio in cui sto usando questo approccio Initialize. L'algoritmo sottostante è piuttosto complesso e questo è solo metà di esso. Finora ho bisogno di 3 cose da inizializzare in questo modo.