如何通过C#中的反射获取接口(interface)的所有实现?
最佳答案
答案是这样;它会搜索整个应用程序域-即您的应用程序当前加载的每个程序集。
/// <summary>
/// Returns all types in the current AppDomain implementing the interface or inheriting the type.
/// </summary>
public static IEnumerable<Type> TypesImplementingInterface(Type desiredType)
{
return AppDomain
.CurrentDomain
.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.Where(type => desiredType.IsAssignableFrom(type));
}
它是这样使用的;
var disposableTypes = TypesImplementingInterface(typeof(IDisposable));
您可能还希望此函数查找实际的具体类型-即过滤掉抽象,接口(interface)和通用类型定义。
public static bool IsRealClass(Type testType)
{
return testType.IsAbstract == false
&& testType.IsGenericTypeDefinition == false
&& testType.IsInterface == false;
}