Perché i contenitori IoC forniscono metodi di risoluzione pubblici?

1

Secondo me inversione dell'inversione e potrebbe far sì che nuovi utenti (incluso me stesso) facciano ipotesi errate sull'uso dei contenitori IoC.

Può essere utilizzato per il pattern di localizzazione del servizio (anti-), ma non mi sembra un motivo valido (può essere una classe separata alla fine della giornata).

Probabilmente ci sarà almeno una chiamata per ottenere l'oggetto root per avviare il programma, ma potrebbe essere chiamato e progettato (firma e contratto) di conseguenza per evitare di chiamarlo per più di un motivo.

Sono più interessato alle app "classiche" a ingresso singolo anziché alle app web lato server.

    
posta Den 18.09.2014 - 10:46
fonte

2 risposte

1

I contenitori DI sono strumenti e gli strumenti possono essere utilizzati in molti modi, che possono essere corretti o errati. Un'ascia è progettata per tagliare il legno, ma può anche tagliare l'albero del vicino perché le sue foglie cadono sul prato del proprietario dell'ascia. L'ascia non sa come viene usata. Ma deve ancora tagliare.

Lo stesso vale per i contenitori DI. I loro creatori non conoscono tutti gli scenari possibili di come verrà utilizzato il loro strumento. È più facile per loro dirti come usarlo correttamente, piuttosto che impedire di fare le cose ritenute come usi errati dello strumento. Risolvi è la funzione che esegue il taglio, in questo caso. Se scegli di usarlo in modo improprio, è una tua scelta.

    
risposta data 18.09.2014 - 12:12
fonte
0

Anche se il pattern localizzatore di servizi è un pattern anti, a volte utile. Supponiamo che tu stia utilizzando il sourcing di eventi in cui puoi avere più gestori di eventi per un evento. Di '

IHandleEvent<T>

Più classi possono gestire lo stesso evento. Quando l'utente effettua il login, viene richiesto di creare un'istanza di tutte le classi che implementano. Inoltre, hai un numero elevato di eventi nel tuo sistema e T non è noto fino al runtime.

IHandleEvent<UserLoggedIn>

In questo caso puoi chiedere al tuo contenitore ioc tutte le implementazioni dell'interfaccia. In alternativa è possibile duplicare molte funzionalità in un contenitore ioc. Ovviamente il primo approccio è più semplice da implementare.

A volte sono utili scenari avanzati degli strumenti.

    
risposta data 18.09.2014 - 12:51
fonte