Type.GetType(string typeName) returns null

Kuntady Nithesh picture Kuntady Nithesh · Sep 16, 2011 · Viewed 9.8k times · Source

My code is

type = Type.GetType(key);

Key which i pass is a namespace qualified name .

My code is in BusinessLayer. I am creating a instance of DataAccessLayer. DataAccessLayer reference is added to BusinessLayer.

I am getting the error as "Could not load type 'Catalyst.DAL.ExamDAO.CExamDAO' from assembly 'BusinessLayer, Version=1.9.3.0, Culture=neutral, PublicKeyToken=null'.".

What should i do to specify explicitly thats the class is from DataAccessLayer ?

Key vale is "Catalyst.DAL.ExamDAO.CExamDAO"

Edit :

My actual code is

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;

        }

I am trying to load the default classes if there is no customization . Method is in BO . If i pass the key as namespace qualified names of any Bo type it converts . But DAO type it wont

Answer

Bharath picture Bharath · Sep 16, 2011

If the type is not present in calling assembly you need to use the AssemblyQualifiedName to get it Type instance. To resolve your issue, you need set key value with AssemblyQualifiedName instead of namespace qualified name.