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 ?