根据类的名称在同一程序集中创建内部类的实例

本文关键字:程序集 程序 集中 创建 内部类 实例 | 更新日期: 2023-09-27 17:59:38

我正在尝试创建与调用类位于同一程序集中的内部类的实例。不幸的是,这对我不起作用。我使用以下代码片段:

Assembly businessAssembly = this.GetType().Assembly;
var concreteValidator = businessAssembly.CreateInstance(t.NotificationType.ValidatorClassName, true,
    BindingFlags.Default | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic, 
    null, 
    new Object[] { t }, 
    null, 
    null);

注意,t.NotificationType.ValidatorClassName的形式为Namespace.ClassName。这不应该完成任务吗?我哪里错了?

根据类的名称在同一程序集中创建内部类的实例

如果类是public内部的并且构造函数是公共的,则CreateInstance方法缺少公共绑定标志:

BindingFlags.Public

这将变成:

Assembly businessAssembly = this.GetType().Assembly;
var concreteValidator = businessAssembly.CreateInstance(t.NotificationType.ValidatorClassName, true,
    BindingFlags.Default | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, 
    null, 
    new Object[] { t }, 
    null, 
    null);