返回实现通用接口的类的类型

Luk*_*ton 1 .net c#

SomeRepository类型不是由返回GetPublicClassesFromApplicationAssembly.我希望返回所有类型的扩展IRepository的类.有谁能看到这个问题?

  private Type[] GetPublicClassesFromApplicationAssembly()
  {
      return typeof (SomeRepository).Assembly.GetExportedTypes()
            .Where(t => t.IsClass)
            .Where(t => t.IsAbstract == false)
            .Where(r => r.IsAssignableFrom(typeof(IRepository<>)))
            .OrderBy(t => t.Name)
            .ToArray();
  }

  public class SomeRepository : IRepository<SomeDomainClass> {}

  public interface IRepository<T> where T : PrimaryKeyBase {}

  public class SomeDomainClass: PrimaryKeyBase {}
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 5

SomeRepository不可分配IRepository<>,不是"真实"类型; 它是可分配的IRepository<SomeDomainClass>.您需要使用GetInterface而不是IsAssignableFrom:

        .Where(r => r.GetInterface("IRepository`1") != null
Run Code Online (Sandbox Code Playgroud)