vba - VBA 的 IoC 容器

标签 vba dependency-injection inversion-of-control ioc-container rubberduck

在 VBA 中很好地阅读了有关 DI 的内容:

https://rubberduckvba.wordpress.com/2016/07/05/oop-vba-pt-2-factories-and-cheap-hotels/

所以现在下一步是在 VBA 中使用 IoC 容器。但我想知道这是否可能!我是 VBA 新手,我不明白一些事情:

  1. 如果在 VBA 中完成,VBA 没有与 C# 等效的命名空间或类型。那么我的查找表如何存储类型的唯一键?
  2. 我考虑过用 C# 编写一个 com dll 并在那里实现一个 IoC,但我不知道如何将接口(interface)类型传递给 com 接口(interface)。我什至无法实例化一个接口(interface)以将其作为对象传递给 com。

我是否只能使用字符串并使用模块在 VBA 中实现命名空间?

PS:我没有找到任何现有的 vba IoC 容器实现,所以如果有的话,我洗耳恭听!

最佳答案

这就是我们一直在追求的字面上的 chalice :能够从 C# 代码在进程中实例化 VBA 类。一旦我们弄清楚如何做到这一点,VBA 代码的 IoC 容器就成为一种明确的可能性,并且绝对会与 Rubberduck 以及成熟的 mocking framework 一起发布。 .

VBA 解决方案可能是不可能的,因为正如 @this 所暗示的那样,在没有类型系统和反射的情况下动态地新建类实例......是纯粹的黑魔法。

抛开技术问题,人们不得不想:IoC 容器会产生如此巨大的影响吗?

事实是,事实并非如此。依赖注入(inject)doesn't need an IoC container ,“穷人的 DI”工作得非常好,我可以补充一下,甚至更好。

我认为,如果您已经达到了 IoC 容器对您的 VBA 项目有意义的程度,并且您了解有关 DI 和 SOLID 的所有内容并相应地编写代码...那么[不是从 VBA 中拿走任何东西,而是]我的评估是,您已经完全准备好从 VBA 继续使用更多支持 OOP 的语言,例如 VB.NET 或 C#,并在 VBA 中使用您学到的有关 OOP 的所有内容,同时发现一系列全新的 OOP通过参数化构造函数、类继承、委托(delegate)、lambda、LINQ 以及许多其他东西实现的可能性。

关于vba - VBA 的 IoC 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56152669/

相关文章:

VBA UDF ParamArray 序列

c# - 单元测试构造函数注入(inject)

c++ - 依赖倒置和设备独立数据

c# - 依赖注入(inject)——订阅组合根而不是构造函数中的事件

c# - 用工作单元装饰特定的命令处理程序

xml - IoC/依赖注入(inject) - 请解释代码与 XML

c# - 如何在 C# 中设置 DI/IoC 和/或工厂模式设计

vba - 使用vba覆盖csv文件

excel - 如何匹配Excel中不同工作表中的多列

VBA 代码循环遍历 Outlook 中的每个文件夹和子文件夹