Sfondo
Come menzionato in questo articolo ,
Inversion of Control can be achieved through various mechanisms such as: Strategy design pattern, Service Locator pattern(SLP), Factory pattern, and Dependency Injection (DI).
Mi manca chiarezza nella dichiarazione precedente, perché di seguito è riportato il mio understading.
1) Creazione del contenitore
Creare un contenitore di dipendenze o contenitore IOC non richiede nessuno di questi modelli di progettazione (menzionato sopra). Abbiamo bisogno di questi modelli di progettazione per ottenere l'accesso a un'implementazione da quel contenitore (che è già stato creato). Ecco il codice C dove init_handlers() crea un contenitore ( imagehandlers in config.c ) di implementazioni configurate in config.txt
2) Accedi a impl dal contenitore
Per ottenere l'accesso a un'implementazione dal contenitore, ad esempio,
Si può fare affidamento sul meccanismo di iniezione implementato utilizzando DI pattern .
o
Affidati al meccanismo di localizzazione del servizio implementato utilizzando Pattern locator di servizio . Ecco il codice C dove displayMenu() individua il servizio da imagehandlers contenitore, basato su un dato input ( scanf("%s",filename); )
Quindi Iniezione delle dipendenze o Modello di localizzazione del servizio non ha nulla da fare con la creazione del contenitore IOC ma per ottenere l'accesso a un'implementazione da quel contenitore.
Ad esempio, in Spring ,
ApplicationContext appContext = new ClassPathXmlApplicationContext("Springbeans.xml")
crea il contenitore IOC con istanze singleton di tutti i bean configurati in Springbeans.xml assumendo che i bean non abbiano un ambito prototipo e
MessageBean mBean = (MessageBean)appContext.getBean("messagebean");
individua il servizio messageBean utilizzando lo schema di localizzazione del servizio da appContext container.
1) Per questa riga di codice ApplicationContext appContext = new ClassPathXmlApplicationContext("Springbeans.xml") che crea un contenitore di dipendenze, è giusto dire che la creazione del contenitore non ha nulla a che fare con il modello di progettazione (come DI o SLP)?
2) Perché appContext non è chiamato contenitore di dipendenza ? Invece, perché appContext è chiamato contenitore IOC ?