【发布时间】:2014-07-07 10:33:22
【问题描述】:
我想在 C# 中使用动态与外部 API (DLL) 中定义的对象进行交互。这样,我不想在我的控制台应用程序中引用 API。这可行吗?
例如,我使用了一些东西:
dynamic obj1 = new ObjectDefinedInAPI();
编译器一直在唠叨这个
The type or namespace name 'objectDefinedInAPI' could not be found ...
有什么想法吗?
谢谢
【问题讨论】:
-
动态加载程序集。关键字
dynamic只是声明成员绑定是延迟的,将在运行时完成。 -
正如@HamletHakobyan 提供的指导,这里是reference tutorial。与您进行互操作的程序集必须在某个时候加载到内存中。想想Windows API,你必须使用
DllImport;将它们加载到内存中。 -
为此,我相信您将不得不求助于 ServiceLocator 模式和一个包含服务接口的库。此库必须对您的控制台应用程序和包含从该接口继承的类的实际实现的库都是通用的。然后,您可以动态加载 DLL 并让它在您的 ServiceLocator 容器中自动注册。
-
或者,如果您真的不想加载 dll,您可以使用
new ExpandoObject()(这比创建类型的实例并将其分配给dynamic字段更有意义)。 -
@JeroenVannevel
ExpandoObject将如何提供帮助? Op需要使用现有的类。它可能有一些 OP 可能需要使用的良好实现的功能。
标签: c# c#-4.0 dynamic reflection