【发布时间】:2014-07-08 23:21:50
【问题描述】:
我正在尝试使用 Activator.CreateInstance(assemblyName, typeName) 创建一个类,但出现错误
在 mscorlib.dll 中出现“System.TypeLoadException”类型的未处理异常
附加信息:无法从程序集“AssessmentDeepCompare, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”加载类型“Question”。
在这个例子中(产生上面的错误)我试图实例化Question,它继承自IAssessmentObject并且在同一个程序集中。
public IAssessmentObject getInstance(string typeName) {
string assemblyName = Assembly.GetAssembly(typeof (IAssessmentObject)).ToString();
return (IAssessmentObject)Activator.CreateInstance(assemblyName, typeName);
}
当您只有类型名称而没有命名空间或程序集时,实例化对象的正确方法是什么?
【问题讨论】:
-
那么,如果你不告诉命名空间,Activator 应该如何知道你想要
X.Foo而不是Y.Foo? -
我的建议是放弃 Activator 并在您的应用程序中引入一些 DI IOC 引擎。在任何情况下,您都需要了解程序集和命名空间。
标签: c# reflection