从.NET中的动态加载类获取接口方法

时间:2013-03-22 17:36:57

标签: c# reflection assemblies dllimport reflection.emit

我有一个.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,我会非常感谢在正确的方向上轻推一下

如果有帮助的话,我确实有Class和Interface的GUID。

1 个答案:

答案 0 :(得分:3)

如果我处于你的情况(如果我正确理解了问题):
我将Interface,s库(DLL)与实现库(DLL)分开 然后动态加载实现库,我的主要源代码是 将编译引用的接口库

Type myClassType = Type.GetTypeFromProgID("MyClass.Myclass.1");
myClassIntrface classObj = 
   Activator.CreateInstance(myClassType) as myClassIntrface;
classObj.CallSomeInterfaceMethod();

希望这将是有用的朋友。