在 VBA 中很好地阅读了有关 DI 的内容:
https://rubberduckvba.wordpress.com/2016/07/05/oop-vba-pt-2-factories-and-cheap-hotels/
所以现在下一步是在 VBA 中使用 IoC 容器。但我想知道这是否可能!我是 VBA 新手,我不明白一些事情:
- 如果在 VBA 中完成,VBA 没有与 C# 等效的命名空间或类型。那么我的查找表如何存储类型的唯一键?
- 我考虑过用 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/