VBA 的 IoC 容器

IoC container for VBA

在 VBA 中很好地阅读了有关 DI 的文章:

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

所以现在下一步是在 VBA 中使用 IoC 容器。但我想知道这是否可能!我是 VBA 的新手,我无法弄清楚一些事情:

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

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

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

这就是我们一直追求的 圣杯:实例化 VBA class in-process 的能力,来自C# 代码。在我们弄清楚如何做到这一点的那一刻,VBA 代码的 IoC 容器就成为一种明确的可能性,并且绝对会与 Rubberduck 一起提供 full-blown mocking framework.

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

撇开技术问题不谈,人们不得不怀疑:IoC 容器会带来如此巨大的不同吗?

事实是,它不会。依赖注入 doesn't need an IoC container、"Poor Man's DI" 工作得很好,我可以补充说,甚至更可取。

我认为,如果您已经达到 IoC 容器对您的 VBA 项目有意义的地步,并且您了解有关 DI 和 SOLID 的所有内容并相应地编写您的代码......那么[不要采取任何远离 VBA 但] 我的评估是你已经完全准备好从 VBA 继续前进并使用更多 OOP-capable 语言,例如 VB.NET 或 C# -并使用你在 VBA 中学到的关于 OOP 的所有知识,同时通过参数化构造函数、class 继承、委托、lambda、LINQ 和许多其他东西发现全新的可能性范围。