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 {}

最佳答案

不能从SomeRepository分配IRepository<>,这不是“真实”类型;可从IRepository<SomeDomainClass>分配。您需要使用GetInterface而不是IsAssignableFrom

        .Where(r => r.GetInterface("IRepository`1") != null

关于c# - 返回实现通用接口(interface)的类的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6312703/

10-13 08:45