2011-03-30 61 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中跨越進程邊界訪問任意對象是不可能的。