根据wiki ,
<小时/>A dependency is an object that can be used (as a service).
Image processing application 是 OOP 范式风格的 C 语法,可解决 4 个 Angular 色,如下所示。
1) 接口(interface) (handlers.h
)
typedef struct {
int (*canHandle) (char *);
int (*drawImage)(char *);
int (*savefile)(char *);
}imageHandler;
<小时/>
2) 获取一个依赖项 (gifhandler.c
)
imageHandler gifhandler = {
gif_canHandle,
gif_drawImage,
gif_savefile
};
<小时/>
3) 依赖容器(由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) 客户端 - 服务定位器 (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) 要在依赖项容器中添加新的依赖项(libxyzhandl.so.1
),只需在 config.txt
中添加一个新条目 可配置,如下图,
config.txt
./libgifhandl.so.1
./libtiffhandl.so.1
2) ./libxyzhandl.so.1
提供的新服务将包含在依赖项容器中,无需重新编译应用程序。
3) 不需要测试完整的应用程序,libxyzhandl.so
的源代码除外。
因此,如果 config.txt
变为空,那么应用程序不会执行任何操作,只是说,我们无法处理此类文件
,如 here 所示。 ,对于任何输入(图像文件)。
下面是调用流程的可视化,
问题:
1)依赖容器与IOC容器不同吗?
2) Spring IOC 容器是否提供了比维护依赖项更多的功能?
最佳答案
这些基本上是同一件事。人们倾向于互换使用它们。你可以找到一个很好的解释here和 here .
您展示的实现允许简单的运行时注入(inject)依赖项,但所谓的 IoC 容器(如 Spring 上下文)没有什么不同。
关于javascript - "IOC container"是否只是维护依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805541/