错误提示:无法将类型为“BM_SqlDAL.Dept”的对象强制转换为类型“部门管理.BM_IDAL”。Dept 这个类继承类 接口 BM_IDAL   ----都是公共的
BM_IDAL中有一个方法GetList();
od是通过反射“BM_SqlDAL.Dept”dll 得到的 Object对象 ((BM_IDAL)od).GetList(); 提示上面的错

解决方案 »

  1.   

    竟然是Dept 继承BM_IDAL你可以直接od.GetList(); 
      

  2.   

    确保你得到的object对象是BM_SqlDAL.Dept多帖些代码.
    1楼没看清你的od是object
      

  3.   

    od是通过反射“BM_SqlDAL.Dept”dll 得到的 Object对象 
     
    object 貌似没有GetList方法吧
      

  4.   

    错误提示:无法将类型为“BM_SqlDAL.Dept”的对象强制转换为类型“部门管理.BM_IDAL”。 
    提示这个错误应该是继承关系错误..
      

  5.   

    问题出在反射部分.DLL根本就没反射过来.这里最常见的问题就是DLL没有被引用.
    注意,你检查一下UI层是否引用了项目中所有的DLL?如果少了DLL引用就会出现你这个问题.
      

  6.   

    反射没有错,继承也没错很奇怪的问题。 namespace 部门管理
    {
      public interface  BM_IDAL
      {
          
          
          /// <summary>
          /// 获得数据列表
          /// </summary>
        List<BM_Model>  GetList();
       
      
      }
    }、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
    using 部门管理;
    namespace BM_SqlDAL
    {
        public class Dept : BM_IDAL
        {        #region BM_IDAL 成员        /// <summary>
            /// 获得根节点
            /// </summary>
            /// <returns>部门集合</returns>
            public List<BM_Model> GetList()
            {            String sql = "select DeptId,DeptName FROM Dept where DeptFatherId=0";
                DataSet List=  DbHelperSQL.Query(sql);            ///////////////////////////            return null;
            }        #endregion
        }
    }
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、namespace 部门管理
    {
       public  class BM_BLL
        {       PluginsDALFactory.PluginsDALFactory DATE = new PluginsDALFactory.PluginsDALFactory("BM_DAL");
           public BM_BLL() {         
        
           }
        
     
           /// <summary>
           /// 获得根节点数据列表
           /// </summary>
           public List<BM_Model> GetList()
           {
               object od=DATE.CreateDAL("Dept");
               return ((BM_IDAL)od).GetList();
             
               
           }    }
    }。。namespace PluginsDALFactory
    {
     public    class PluginsDALFactory
        {
            private static  string AssemblyPath;
      
         
            public PluginsDALFactory( string DALname)
            {          
                AssemblyPath = ConfigurationManager.AppSettings[DALname];
              
            }
           
            //  Assembly Assly;        /// <summary>
            /// 反射DAL
            /// </summary>
            /// <param name="AssemblyPath">DAL路径</param>
            /// <param name="classNamespace">类全称</param>
            /// <returns></returns>
            private static object CreateObject(string AssemblyPath, string classNamespace)
            {            Assembly Assly = Assembly.Load(AssemblyPath);
                object objType = Assly.CreateInstance(classNamespace);
                return objType;        }
            /// <summary>
            /// 创建dept数据层接口
            /// </summary>
            public object CreateDAL(string DALname)
            {            string ClassNamespace = AssemblyPath + "." + DALname;
                object objType = CreateObject(AssemblyPath, ClassNamespace);
                return objType;
            }
        }
    }
      

  7.   

    你检查一下UI层是否引用了项目中所有的DLL,必须全部引用的.
      

  8.   

    加个断点 看看_InterfacesList 和_OdType类是什么 的接口是什么 注意版本
    object od=DATE.CreateDAL("Dept"); 
    Type _OdType =od.GetType();
    Type[] _InterfacesList = _OdType.GetInterfaces();
              return ((BM_IDAL)od).GetList(); 有可能引用的实例和接口不对
      

  9.   

    1、在你的配置文件中,appSettings中<add key="BM_DAL" value="xxx" />中的xxx应该指向的是BM_SqlDAL.Dept类所在的assembly2、在部门管理.BM_BLL.GetList()方法的return这一句上设置个断点,调试程序,如果程序正常停在这个断点上,你就去看看上一句中的od对象是什么类型。如果不是BM_SqlDAL.Dept类型,则明显会出错,如果的确是BM_SqlDAL.Dept类型,那么我觉得应该是你用错assembly版本了,换句话说,Dept类所继承的BM_IDAL接口与你Assembly.Load中装载的assembly中的BM_IDAL接口是两个不同的版本,即使它们的内容一致我建议你在解决方案上新建一个ClassLibrary项目,然后把这个BM_IDAL接口移到这个新建的ClassLibrary里,再在其他的项目中引用这个ClassLibrary以使用BM_IDAL接口。
      

  10.   

    感谢以上所有回答者
    acqy 说的我试了一下,的确是这样