C#:如何找到实现IRepo <t1,t2 =“”>的类?

时间:2016-07-27 12:22:47

标签: c# generics

我有一个通用接口:IRepo<T1, T2>。 我有几个实现此接口的类:

class UserRepo:       IRepo<UserEntity, long>
class AdminUserRepo:  IRepo<UserEntity, long>
class OrderRepo:      IRepo<Order, Guid>

如何扫描程序集以查找:

  • 找到实现UserRepo的{​​{1}}和AdminUserRepoIRepo<UserEntity, long>User在运行时已知)
  • 找到实现long的所有repo类(T1和T2未知)

2 个答案:

答案 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));