2011-03-30 64 views
0

我正在为C#开发一个只能在调试过程中使用的插件。一旦实例化,我的添加需要查找特定类或接口的所有实例,以显示有关找到的数据的图形。C#加载项:调试时如何访问对象的运行时实例?

如何在我的扩展中找到或访问这些对象?我有权访问我的扩展中的DTE2应用程序对象,但我不确定如何搜索VS正在调试的实际代码。我想我可能以某种方式能够使用反射,但我不知道在哪里看。

谢谢。

回答

0

我已经实现了一个插件,它可以通过给定目录中的dll进行搜索并找到实现特定接口的类。下面是我用来做这个类:

public class PlugInFactory<T> 
{ 
    public T CreatePlugin(string path) 
    { 
     foreach (string file in Directory.GetFiles(path, "*.dll")) 
     { 
      foreach (Type assemblyType in Assembly.LoadFrom(file).GetTypes()) 
      { 
       Type interfaceType = assemblyType.GetInterface(typeof(T).FullName); 

       if (interfaceType != null) 
       { 
        return (T)Activator.CreateInstance(assemblyType); 
       } 
      } 
     } 

     return default(T); 
    } 
} 

所有你需要做的就是用这样的初始化这个类:

PluginLoader loader = new PlugInFactory<InterfaceToSearchFor>(); 
InterfaceToSearchFor instanceOfInterface = loader.CreatePlugin(AppDomain.CurrentDomain.BaseDirectory); 
+0

这是有用的,但我需要的类的实际实例发现。不仅仅是哪个类实现了一个接口。如果@ JaredPar是正确的并且我的请求是不可能的,仍然可以使用它。 – 2011-03-30 23:06:20

0

这种类型的操作实际上不可能从Visual Studio插件。当您的加载项在Visual Studio进程中运行时,该对象在调试时处于活动状态。在.Net中跨越进程边界访问任意对象是不可能的。