使用 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
我有一个控制台应用程序,我在其中声明了一个在命名空间下定义的 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