我的代码是Type.GetType(字符串的typeName)返回null
type = Type.GetType(key);
关键,我是通过一个命名空间限定名称。
我的代码在BusinessLayer中。我正在创建一个DataAccessLayer的实例。 DataAccessLayer引用被添加到BusinessLayer。
我收到错误的“未能从程序集加载类型“Catalyst.DAL.ExamDAO.CExamDAO‘BusinessLayer,版本= 1.9.3.0,文化=中立,公钥=空’。”。
我该怎么做才能明确指出该类是从DataAccessLayer?
主要淡水河谷 “Catalyst.DAL.ExamDAO.CExamDAO”
编辑:
我实际的代码是
public static object getClassInstance(string key, params object[] constructorArgs)
{
string assemblyPath = null;
string customClassName = null;
DataSet objDataset = getAssemblyInfo(key);
if (objDataset != null && objDataset.Tables.Count > 0 && objDataset.Tables[0].Rows.Count > 0)
{
assemblyPath = objDataset.Tables[0].Rows[0]["ACA_ASSEMBLY_PATH"].ToString();
customClassName = objDataset.Tables[0].Rows[0]["ACA_CLASS_NAME"].ToString();
}
Assembly assembly;
Type type;
if (assemblyPath != null && assemblyPath != string.Empty)
{
assembly = Assembly.LoadFile(assemblyPath);
type = assembly.GetType(customClassName);
}
else // if no customisation
{
type = Type.GetType(key);
}
object classInstance = constructorArgs == null ? Activator.CreateInstance(type) : Activator.CreateInstance(type, constructorArgs);
if (classInstance == null) throw new Exception("broke");
return classInstance;
}
我想,如果有载入默认类没有定制。方法在BO中。 如果我将密钥作为任何Bo类型的命名空间限定名称传递,它将转换。但是,它的DAO类型不会
你为什么做这种方式,而不是'新CExamDAO()'?如果“DataAccessLayer引用被添加到BusinessLayer”是真的,那么应该没有理由不能使用'new'运算符。或者如果你真的想要一个类型引用,那么'typeof(CExamDAO)' –
给我们提供“key”的文本值。 – xanatos
@Adam Ralph。其实我需要在自定义程序集和默认程序集之间切换。我把这个代码放在这里。 –