Come per wiki ,
A dependency is an object that can be used (as a service).
qui è il paradigma OOP che utilizza la sintassi C che indirizza 4 ruoli, mostrati di seguito.
1) interfaccia ( handlers.h
)
typedef struct {
int (*canHandle) (char *);
int (*drawImage)(char *);
int (*savefile)(char *);
}imageHandler;
2) Prendi una dipendenza ( gifhandler.c
)
imageHandler gifhandler = {
gif_canHandle,
gif_drawImage,
gif_savefile
};
3) Contenitore delle dipendenze (distribuito da config.c
)
//gifhandler.c - dependency
int _init(){
printf(" registering gifhandler \n");
reg_handler(&gifhandler);
return 0;
}
//config.c
imageHandler *imagehandlers[10];
int reg_handler(imageHandler *ih){
// we need to perform checks here.
imagehandlers[libs] = ih;
libs++;
return TRUE;
}
// config.c
int init_handlers(){
.....
soptr = dlopen(so_name,RTLD_NOW);
....
}
4) Client: localizzatore di servizio ( UI.C
)
// UI.C
switch(choice){
case 1:
vdrawImage(filename);
break;
case 2:
vsavefile(filename);
break;
}
// viml.c
int vdrawImage(char *filename){
...
handleno = find_handler(filename);
...
ih=imagehandlers[handleno];
ih->drawImage(filename);
return FALSE;
}
// viml.c
int vsavefile(char *newfilename ){
...
handleno = find_handler(newfilename);
...
ih=imagehandlers[handleno];
ih->savefile(newfilename);
}
1) Per aggiungere una nuova dipendenza ( libxyzhandl.so.1
) nel contenitore Dipendenze, è sufficiente aggiungere una nuova voce in config.txt
configurabile , come mostrato di seguito,
config.txt
./libgifhandl.so.1
./libtiffhandl.so.1
2) Nuovo servizio fornito da ./libxyzhandl.so.1
, sarà contenuto dal contenitore delle dipendenze senza ri-compilazione di applicazione.
3) Il test dell'applicazione completa è non richiesto , ad eccezione del codice sorgente di libxyzhandl.so
.
Quindi, se config.txt
diventa vuoto, l'applicazione non fa nulla, tranne il dire, We cannot handle this kind of files
, mostrato qui , per qualsiasi input (file immagine).
Di seguito è la visualizzazione del flusso chiamate,
Domanda:
Questo contenitore di dipendenze può essere chiamato un contenitore IOC ?