控制反转或依赖注入 - 有人在C语言中使用吗?

4
2个回答

3

一直都是用C语言来做这个。Azder在第二个链接的答案中给出了提示:

“当你给Windows API函数一个回调函数指针时,你就把控制权交给了他们,让他们用自己的参数调用你的函数。”

从这个角度来看,这个概念已经被标准库中的qsort()和bsearch()函数使用了。


0
在Windows上,您有COM可以做类似的事情。您拥有一个接口并在DLL中提供实现。您注册DLL,该注册过程会在注册表中创建一个条目,将接口(UUID)和提供实现的DLL进行映射。基于此信息,当您执行QueryInterface()时,COM服务将加载相应的DLL并创建实现对象的实例,将其强制转换为请求的接口类型并返回。
这是使用COM的IoC。由于COM是用'C'实现的,我确信只需解决细节即可在嵌入式系统上使其正常工作。您需要一个文件来存储接口、实现和DLL之间的映射,而不是注册表。这在Dassault Systemes的Catia(V5/V6)架构中完成。它被称为对象建模框架。
实现此操作的步骤:
  1. 为返回接口指针的函数定义命名规范
  2. 创建一个包含接口和实现它的DLL文件
  3. 在DLL中实现接口并更新第2步中的文件
  4. 在主代码中,读取文件并创建接口和DLL的映射表
  5. 当需要一个接口时,如果未加载,则加载DLL并获取返回接口指针的函数的地址(基于定义的命名规范) 例如:对于IDoSomething接口,您的函数可能是Get_IDoSomething()。 由于我们根据名称获取函数地址,因此它是在运行时而不是编译时完成的。
  6. 调用从第5步获得的地址处的函数。现在,您已经根据第3步中DLL中的实现拥有了一个指向接口的指针。

因此,您将接口与其实现在运行时绑定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接