如何获取实现IMyInterface的引用中的所有类型

我有一个项目包含很多参考。
我需要找到实现IMyInterface接口的所有类型。

我尝试了AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes())但它没有返回引用中的所有类型。

我怎么做?

我想问题可能是你当前没有加载一些引用的程序集。 您可以使用GetReferencedAssemblies获取所有引用的程序集 – 但这只会产生名称。

如果需要,可以继续使用Assembly.Load加载程序集并进一步检查它们。

所以一个可能的片段应该是

  var types = System.Reflection.Assembly.GetExecutingAssembly() .GetReferencedAssemblies() .SelectMany(name => Assembly.Load(name).GetTypes()) .Union(AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())); 

搜索实现您的界面的类型:

  var withInterfaces = types.Where(t => t.GetInterfaces().Any(i => i == typeof(IDisposable))); 

如果这不是我失去的伎俩……

你试图在运行时这样做吗?

如果您只需要一般地了解这些信息,并且不必在运行时,您可以在Visual Studio中加载解决方案,然后右键单击接口IName中的接口名称{line,然后选择“查找所有引用” – 这应该显示代码中对接口的所有引用。

如果它是您在运行时真正需要的东西,那么请参阅上面的答案。

 using System; using System.Linq; using System.Reflection; // try this for fun: using IMyInterface=System.Collections.IEnumerable; namespace TestThat { class MainClass { public static void Main (string[] args) { var x = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(a => a.GetTypes()) .Where(t => typeof(IMyInterface).IsAssignableFrom(t)) .Where(t => !(t.IsAbstract || t.IsInterface)) .Except(new [] { typeof(IMyInterface) }); Console.WriteLine(string.Join("\n", x.Select(y=>y.Name).ToArray())); } } } 

如果要查找派生类并想要“跳过”基类:

  .Except(new [] { typeof(MyBaseClass) }); 

有你的界面检测。 我会看看为什么你没有得到所有类型的参考。 我希望你的代码可以做到这一点,Brb。