我有一个控制台应用程序,我在其中声明了一个在命名空间下定义的类。我想在运行时使用assemblyname和class name创建该类的实例。我尝试了下面的代码
var objAssembly = Assembly.Load(assemblyName);
var objType = objAssembly.GetType(className);
var obj = Activator.CreateInstance(objType);
但它不起作用。以下是班级结构
namespace ReportService.ReportWriters
{
class ExcelWriter : IReportWriter
{
}
}
我传递了程序集名称= ExcelWriter class name = ReportService.ReportWriters
答案 0 :(得分:0)
也许tou应该获取所有类型并找到ExcelWriter
类并初始化它:
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;
添加到使用中。
答案 1 :(得分:0)
是的,因为您的类不包含任何公共或内部默认构造函数。
创建公共默认构造函数,然后尝试,它应该正常工作。
查看这篇文章 -
https://msdn.microsoft.com/en-us/library/wccyzw83(v=vs.110).aspx