首页 > 解决方案 > 如何获取解决方案项目中的所有类型?

问题描述

我有一个解决方案和多个 .net 核心项目。

WebApi项目引用Business,但不引用Data项目。所以我想在实现的解决方案中获取所有类型IMyInterface。所有项目都有实现IMyInterface. 我想找到所有这些。

我在 WebApi 项目中调用以下代码:

        var m = AppDomain.CurrentDomain.GetAssemblies()
            .SelectMany(name => name.GetTypes())
            .Where(type => typeof(IMyInterface).IsAssignableFrom(type))
            .ToList();

但没有找到类型。

我怎样才能找到?

标签: c#.net.net-coresystem.reflection

解决方案


你应该得到这样的所有装配项目

public Assembly[] GetAssemblies()
{
      var dataAssembly = typeof(AnClassInDataLayer).Assembly;
      var businessAssembly = typeof(ACLassInBusinessLayer).Assembly;
      var webApiAssembly = typeof(Startup).Assembly;
      return new Assembly[] { businessAssembly , dataAssembly, webApiAssembly  };
}

然后

var m = GetAssemblies()
        .SelectMany(name => name.GetTypes())// or .SelectMany(a => a.ExportedTypes)
        .Where(type => typeof(IMyInterface).IsAssignableFrom(type))
        .ToList();

更新

在.Net Core中,如果WebApi项目引用了business层,Business层引用了Data层,那么在WebApi层中你可以访问Data


推荐阅读