获取当前程序集的某些接口的所有实现(类)的方法是什么? [关闭]

问题描述 投票:-2回答:1

我想获得当前程序集的某些接口的所有实现(类),并希望创建该类的实例。我怎么能这样做?

在mvc5框架中,它就像这样工作

  var type = typeof(IMyInterface);
  var types = AppDomain.CurrentDomain.GetAssemblies()
  .SelectMany(s => s.GetTypes())
  .Where(p => type.IsAssignableFrom(p) && !p.IsInterface);

但在.net核心1.0中我该怎么办?

c# asp.net-core-mvc .net-core asp.net-core-1.0
1个回答
2
投票

获得所有实施:

var type = typeof(IMyInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(s => s.GetTypes())
    .Where(p => type.IsAssignableFrom(p) && !p.IsInterface);

要创建新对象,您需要Activator

ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);

现在你只需要组合代码:

var type = typeof(IBase);
var types = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(s => s.GetTypes())
    .Where(p => type.IsAssignableFrom(p) && !p.IsInterface);

var myObjects = new List<IBase>();
foreach (var t in types)
{
    myObjects.Add((IBase)Activator.CreateInstance(t));
}

当有必要使用.Net Core 1.0时,我有坏消息,不可能使用AppDomain.CurrentDomain.GetAssemblies()或类似的东西。见:.NET Core 1.0, Enumerate All classes that implement base class

© www.soinside.com 2019 - 2024. All rights reserved.