首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CoreCLR中获取可用类型

在CoreCLR中获取可用类型
EN

Stack Overflow用户
提问于 2015-05-02 20:42:44
回答 1查看 3.5K关注 0票数 12

这很容易在旧的.NET中获得所有可用类型(例如某些接口),但我无法在新的CoreCLR中找到如何做到这一点。

我想要做的是像GetRepository这样的函数,它应该查找IRepository的现有实现并返回该类型的新实例。执行工作将在不同的项目中进行。

所以,在.NET中,我可以使用这样的东西:

代码语言:javascript
复制
AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())

目前,我对CoreCLR的唯一解决方案是:

代码语言:javascript
复制
public T GetRepository<T>()
{
  foreach (Type type in typeof(T).GetTypeInfo().Assembly.GetTypes())
    if (typeof(T).IsAssignableFrom(type) && type.GetTypeInfo().IsClass)
      return (T)Activator.CreateInstance(type);

  return default(T);
}

但是,只有当接口和实现位于同一个程序集中时才能工作(这不是我的情况)。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-05 09:45:05

所以,下面是微软的答案:https://github.com/dotnet/coreclr/issues/919

总之,有新的

代码语言:javascript
复制
Microsoft.Framework.Runtime.LibraryManager

使用

代码语言:javascript
复制
public IEnumerable<ILibraryInformation> GetLibraries();
public IEnumerable<ILibraryInformation> GetReferencingLibraries(string name);

Microsoft.Extensions.DependencyModel.DependencyContext:UPD:从RC2开始的使用RC2代替:

代码语言:javascript
复制
DependencyContext.Default.CompileLibraries
DependencyContext.Default.RuntimeLibraries
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30007264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档