搜索程序集中的类并调用方法

本文关键字:调用 方法 程序 程序集 集中 搜索 | 更新日期: 2023-09-27 18:35:55

我试图在程序集中找到所有影响某个接口的类,然后基本上获得该对象的属性。 这是我尝试过的:

List<IManager> Managers = new List<IManager>();
const string @namespace = "MyProject.Models.Manager";
var managerClasses = from t in Assembly.GetExecutingAssembly().GetTypes()
        where t.IsClass && t.Namespace == @namespace
        select t;
foreach (var managerClass in managerClasses.Where(t => typeof(IManager).IsAssignableFrom(t)))
{
    var r = (IManager) managerClass;
    Managers.Add(r);
}

我的代码在var r = (IManager) managerClass;上崩溃,我不明白如何将该对象转换为 IManager 类型。

编辑:我已经用适当的变量名称修复了上面的代码以消除混淆。

搜索程序集中的类并调用方法

在您执行var r = (IManager) report的位置,报表仍然是Type对象。您需要实例化该类型。您可以使用Activator.CreateInstance()执行此操作,但您可能还希望首先对该类型的构造函数做出一些断言(例如,需要一个无参数构造函数),并检查它是否是具体的类类型(即不是抽象的)。