我的代码是
type = Type.GetType(key);
我传递的键是 namespace 限定名。
我的代码在BusinessLayer中。我正在创建一个DataAccessLayer实例。
DataAccessLayer引用已添加到BusinessLayer。
我收到了错误,提示“无法从程序集'BusinessLayer,版本= 1.9.3.0,文化=中性,PublicKeyToken =空'中加载类型'Catalyst.DAL.ExamDAO.CExamDAO'。” 。
我应该怎么做才能明确指定多数民众赞成在类是从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中。
如果我将 key 作为任何Bo类型的 namespace 限定名称传递,它将转换。但是DAO类型不会
最佳答案
如果您知道DataAccessLayer
中将包含任何类型,那么我将尽可能简单地获取Assembly
引用,例如
Assembly assembly = typeof(AnyPublicTypeWithinTargetAssembly).Assembly;
Type type = assembly.GetType(namespaceQualifiedTypeName);
一种替代方法是将
Type.GetType
与程序集限定的名称一起使用,但这在指定类型名称方面花费了更多时间。关于c# - Type.GetType(string typeName)返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7441003/