2

在 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,但我不知道如何将接口类型传递给 com 接口。我什至无法实例化一个接口以将其作为对象传递给 com.

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

PS:我没有找到任何用于 vba 的 IoC 容器的现有实现,所以如果有的话,我会全力以赴!

4

1 回答 1

4

这就是我们一直追求的真正的圣杯:从 C# 代码在进程中实例化 VBA 类的能力。在我们弄清楚如何做到这一点的那一刻,一个用于 VBA 代码的 IoC 容器就成为一种明确的可能性,并且绝对会与 Rubberduck 以及一个成熟的模拟框架一起提供。

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

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

事实是,它不会。依赖注入不需要 IoC 容器,“Poor Man's DI”工作得非常好,我可以补充一下,甚至更可取。

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

于 2019-05-15T15:44:01.413 回答