c# - 返回实现通用接口(interface)的类的类型

标签 c# .net

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/

相关文章:

c# - 字符串替换 C# 中的变音符号

c# - 使用 Javascript 更改级联 DropDownList 值时 MVC 模型中断

c# - xamarin.ios 使用仅图像代码实现 PageController

c# - 如何将焦点设置到用户控件

.net - NUnit 和与 Jenkins 的持续集成 : which NUnit-files are needed?

.net - 拆分 .Net 代码文件

c# - 为什么在system32文件夹中找不到C#库?

c# - .net 5 Azure b2c 注销循环

c# - Linq 加入 - 重复

c# - ClickOnce Windows 窗体应用程序在尝试通过 CheckForDetailedUpdate() 更新时抛出异常