使用 class 的程序集名称和类型动态创建 class 对象

dynamically create class object by using assemblyname and type of class

我有一个控制台应用程序,我在其中声明了一个在命名空间下定义的 class。我想在运行时使用程序集名称和 class 名称创建 class 的实例。我试过下面的代码

var objAssembly = Assembly.Load(assemblyName);
var objType = objAssembly.GetType(className);
var obj = Activator.CreateInstance(objType);

但它不起作用。下面是class结构

namespace ReportService.ReportWriters
{
    class ExcelWriter : IReportWriter
    {
    }
}

我通过程序集名称= ExcelWriter class 姓名 = ReportService.ReportWriters

也许你应该获取所有类型并找到 ExcelWriter class 并初始化它:

var objAssembly = Assembly.Load(assemblyName);
var objType = objAssembly.GetTypes().First(x => x.Name == "ExcelWriter");
var obj = Activator.CreateInstance(objType);

或使用Assembly.CreateInstance()方法:

var namespaceName = "ReportService.ReportWriters";
var objAssembly = Assembly.Load(assemblyName);
var obj = objAssembly.CreateInstance(objAssembly.GetName().Name.Replace(" ","_") + "." + namespaceName + "." + "ExcelWriter");

注意: 如果 assemblyName 包含空格,编译器会将空格转换为 _ 字符。

注意:using System.Linq; 添加到 usings。

是的,因为您的 class 不包含任何 public 或内部默认构造函数。

创建public默认构造函数然后尝试,它应该可以正常工作。

查看这篇文章 -

https://msdn.microsoft.com/en-us/library/wccyzw83(v=vs.110).aspx