Sto cercando di capire l'Inversion of Control e i dos e donts di questo. Di tutti gli articoli che ho letto, c'è uno di Mark Seemann (a cui è ampiamente collegato SO) che chiede strongmente alla gente di non utilizzare il modello di localizzazione del servizio.
Poi, da qualche parte lungo la strada, mi sono imbattuto in questo articolo di Ken dove ci aiuta a costruire il nostro IoC personale.
Ho notato che non è altro che un'implementazione del modello di localizzazione del servizio.
Domande:
- La mia osservazione è corretta sul fatto che questa implementazione è il modello del localizzatore di servizi?
- Se la risposta a 1. è sì, allora tutti i contenitori IoC (come Autofac) usano il modello di localizzazione del servizio?
- Se la risposta a 1. è no, allora perché questo differen?
- C'è qualche altro schema (diverso da DI) per l'inversione del controllo?
Consolidamento delle risposte:
Rispondi 1. Kelly : il pattern di localizzazione del servizio viene effettivamente utilizzato per la chiamata di risoluzione iniziale. Il pattern del localizzatore di servizi deve essere utilizzato almeno una volta.
Risposta 2. Eric : Chiamare semplicemente Ioc.Resolve (ISomeInterface) non significa che il Il contenitore IoC viene utilizzato come localizzatore di servizi. Dopotutto, Resolve () deve essere chiamato da qualche parte, giusto?
Risposta 3. Tungano : No, il suo codice contiene un costruttore che riceve una dipendenza ... No, un il contenitore non "usa" alcun motivo. Dipende davvero dal programmatore che usa il contenitore per usare un modello. È tutto nel modo in cui lo si collega. Fondamentalmente puoi usare entrambi un contenitore per DI e Localizzatore di servizio.
Risposta 4. Gnat : ... fabbrica e ricerca ... [può essere utilizzato per l'inversione di controllo.]
Ho imparato, grazie alle risposte di cui sopra, che IoC stesso utilizza il Service Locator Pattern. Questo non è intrinsecamente dannoso. L'utilizzo di IoC può essere fatto in diversi modi (incluso il modello di localizzazione del servizio). Questa è la parte di cui abbiamo bisogno di fare attenzione e utilizzare altre opzioni di iniezione della dipendenza.