【发布时间】:2009-12-01 09:45:22
【问题描述】:
例如,请看这里
提醒自己什么是 IoC 和 DI。
这里的问题和答案
Is Inversion of Control specific to OO languages?
建议它不需要 OO 语言。
现在,我的问题是:有人用 C 做这个吗?
我之所以这么问,是因为我们编写了嵌入式 C,并且正在考虑应用这些方法,而无需更改我们的编程语言。
【问题讨论】:
标签: c dependency-injection components
例如,请看这里
提醒自己什么是 IoC 和 DI。
这里的问题和答案
Is Inversion of Control specific to OO languages?
建议它不需要 OO 语言。
现在,我的问题是:有人用 C 做这个吗?
我之所以这么问,是因为我们编写了嵌入式 C,并且正在考虑应用这些方法,而无需更改我们的编程语言。
【问题讨论】:
标签: c dependency-injection components
一直在 C 中做。 Azder 在您的第二个链接中的回答中给出了提示:
“当你给一个 Windows API 函数一个指向回调函数的指针时,你给了他们使用他们自己的参数调用你的函数的控制权。”
从这个角度来看,这个概念已经在标准库中用于函数 qsort() 和 bsearch()。
【讨论】:
在 Windows 上,你有 COM 做类似的事情。您有一个接口并在 DLL 中提供了一个实现。您注册 DLL,并且该注册过程在注册表中创建一个条目,映射接口 (UUID) 和提供实现的 DLL。根据这些信息,当你执行QueryInterface()时,COM服务会加载相应的DLL并创建一个实现对象的实例,将其类型转换为请求的接口类型并返回。
这是使用 COM 的 IoC。由于 COM 是在“C”中实现的,我相信它只是在制定细节以使其在您的嵌入式系统上运行。您将需要一个文件来存储接口、实现和 DLL 之间的映射,而不是注册表。这是在 Catia(来自 Dassault Systemes)的 CNext (V5/V6) 架构中完成的。它被称为对象建模器框架。
实现这一目标的步骤:
因此,您可以在运行时将接口与其实现联系起来。
【讨论】: