我的代碼是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。其實我需要在自定義程序集和默認程序集之間切換。我把這個代碼放在這裏。 –