我有一个通用接口:IRepo<T1, T2>
。
我有几个实现此接口的类:
class UserRepo: IRepo<UserEntity, long>
class AdminUserRepo: IRepo<UserEntity, long>
class OrderRepo: IRepo<Order, Guid>
如何扫描程序集以查找:
UserRepo
的{{1}}和AdminUserRepo
(IRepo<UserEntity, long>
和User
在运行时已知)long
的所有repo类(T1和T2未知)答案 0 :(得分:1)
查找实现封闭通用接口的类型
assembly.GetTypes().Where(type =>
typeof(IRepo<UserEntity, long>).IsAssignableFrom(type))
查找实现开放式通用接口的类型
assembly.GetTypes().Where(type => type.GetInterfaces()
.Any(i => i.IsGenericType &&
i.GetGenericTypeDefinition() == typeof(IRepo<,>)))
答案 1 :(得分:0)
我正在使用Linq的这段代码我希望它有所帮助。
var type = typeof(IMyInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));