【发布时间】:2013-03-22 17:36:56
【问题描述】:
我有一个 .dll 库,我正在编写它与专有 COM 程序集的接口。我的目标是在构建完成后在线发布我的作品,但是我需要删除 COM 程序集作为项目参考,以避免分发此专有 dll。所以我想要做的是在运行时动态加载程序集,并在我需要的地方调用方法。传统上,我对未知类型使用对象反射,但这有时会变慢,并且涉及几个丑陋的实例。在 .NET 4.0 中,有没有一种方法可以干净地获取所有方法并在运行时将它们扔到动态类/接口中?
我目前正在获取这样的对象:
Type myClassType = Type.GetTypeFromProgID("MyClass.Myclass.1");
object classObj = Activator.CreateInstance(myClassType);
我以为我可以使用 Type.GetMethods(),但它只返回通用的(Equals、ToString、GetLifetime...等)。我知道该类使用接口,所以我也尝试研究动态加载接口。这让我想到了 Reflection.Emit 和 Microsoft.Xrm.Sdk,到目前为止我还无法理解。
如果有办法让我调用方法而无需每隔几行抛出一堆 BindingFlags,我将非常感谢朝正确方向轻推
如果有帮助的话,我确实有类和接口的 GUID。
【问题讨论】:
-
看看这个 Stackoverflow 帖子,看看使用反射的替代方法是否有帮助。 stackoverflow.com/questions/14422786/alternative-to-reflection
-
这在你使用后期绑定时很正常。使用 dynamic 关键字可以减少编写代码的痛苦。
-
汉斯,这可能是我最终要走的方向。我只需要从 ProgIds 手动创建比我想要的更多的类型,而且我不会有任何智能感知(考虑到专有 dll 首先是垃圾,这可能是件好事)。
标签: c# reflection assemblies dllimport reflection.emit