错误:
未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。代码:
DALFactory(个人觉得问题在这里)
namespace Div.DALFactory
{
    public sealed class DALAccess
    {
        private static readonly string path = ConfigurationManager.ConnectionStrings["path"].ConnectionString.ToString();
      
        private DALAccess()
        { }
        public static IMessageBoard CreatMessage()
        {
            
            string classname = path + ".MessageBoard";
            return (IMessageBoard)Assembly.Load(path).CreateInstance(classname);
        }
    }
}BLL层
namespace Div.BLL
{
    
    public class MessageBoard
    {
        public MessageBoard()
        { }
        private readonly IMessageBoard access = DALAccess.CreatMessage();        public DataSet GetList()
        {
            //SQLServerDAL.MessageBoard sm = new Div.SQLServerDAL.MessageBoard();
            //return sm.GetList();//这样调用没有问题
            return access.GetList();
        }    }
}

解决方案 »

  1.   

    看来实例化的问题(IMessageBoard)Assembly.Load(path).CreateInstance(classname); 这一句,一个一个检查
      

  2.   


    petshop 4.0 里面的
     现在就一个 起始页面的 目录绑定介绍第一部分//// 按照这个框架自己先做一个小例子吧...
             ★ WEB  表示层
     private void BindCategories() {
                Category category = new Category();
                repCategories.DataSource = category.GetCategories(); // 将 IList<CategoryInfo> 作为数据源
                repCategories.DataBind();            
            
             ★ BLL  业务逻辑层 
    namespace PetShop.BLL {    
        public class Category {
            private static readonly ICategory dal = PetShop.DALFactory.DataAccess.CreateCategory();  
            public IList<CategoryInfo> GetCategories() {
                return dal.GetCategories();
            }       
        }
    }
            ★ DALFactory  数据层的抽象工厂 
    namespace PetShop.DALFactory {
        public sealed class DataAccess {     
            private static readonly string path = "PetShop.SQLServerDAL";       
            private DataAccess() { }
            public static PetShop.IDAL.ICategory CreateCategory() {
                string className = path + ".Category";
                return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className); ------这几个方法原来没有接触过... 说明 : 通过 SQLServer数据访问层 和 数据库访问组件基础类 已经从数据库中得到了数据.此时表示层直接调用 SQLServerDAL 就可以了.
    但是 却没有这么做..而是通过 BLL---->.DALFactory----> 才将数据引用进来.        }
        }
    }
            ★ IDAL  数据访问层接口定义 
    namespace PetShop.IDAL{
    public interface ICategory {      
    IList<CategoryInfo> GetCategories();     
    }
    }
            ★ Model 业务实体 
    namespace PetShop.Model {    [Serializable]
        public class CategoryInfo {      
            private string id;
            private string name;
            private string description;
            public CategoryInfo() { }
            public CategoryInfo(string id, string name, string description) {
                this.id = id;
                this.name = name;
                this.description = description;
            }
            public string Id {
                get { return id; }
            }
            public string Name {
                get { return name; }
            }
            public string Description {
                get { return description; }
            }
        }
    }
          
          ★ SQLServerDAL  SQLServer数据访问层      
    namespace PetShop.SQLServerDAL {
        public class Category : ICategory {     
            private const string SQL_SELECT_CATEGORIES = "SELECT CategoryId, Name, Descn FROM Category";
            public IList<CategoryInfo> GetCategories() {
    IList<CategoryInfo> categories = new List<CategoryInfo>();           
    using(SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORIES, null)) {
                    while (rdr.Read()) {
                        CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
                        categories.Add(cat);
                    }
                }  
                return categories;
            }   
         }
    }
          ★ DBUtility  数据库访问组件基础类
    namespace PetShop.DBUtility {    
        public abstract class SqlHelper {  
            public static readonly string ConnectionStringLocalTransaction ="Server=.;Database=master;uid=sa;pwd=sa";        
            public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
                SqlCommand cmd = new SqlCommand();
                SqlConnection conn = new SqlConnection(connectionString);          
                try {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    return rdr;
                }
                catch {
                    conn.Close();
                    throw;
                }
            }    
        
            private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                cmd.Connection = conn;
                cmd.CommandText = cmdText;
                if (trans != null)
                    cmd.Transaction = trans;
                cmd.CommandType = cmdType;
                if (cmdParms != null) {
                    foreach (SqlParameter parm in cmdParms)
                        cmd.Parameters.Add(parm);
                }
            }
        }
    }
      

  3.   

    private static readonly string path = ConfigurationManager.ConnectionStrings["path"].ConnectionString.ToString();?
    你的path是一个connection string 吧?拿AppSetting用 ConfigurationManager.AppSettings["path"]Assembly load不起来当然抛出NullReferenceException
      

  4.   

    string classname = path + ".MessageBoard"; 
    这句的值是否正确?path的值应该是Div.SQLServerDAL
      

  5.   

    当 <add name="path" connectionString="SQLServerDAL"/> 会提示上面错误改为<add name="path" connectionString="Div.SQLServerDAL"/> 会提示下面错误未能加载文件或程序集“Div.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IO.FileNotFoundException: 未能加载文件或程序集“Div.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。但我的SQLServerDAL层命名空间是定义为:namespace Div.SQLServerDAL请大家帮忙!!
      

  6.   

    path的值我断点测试正确Div.SQLServerDAL 
      

  7.   

     刚开始的时候我也是老出这个问题的---
    在这个SQLServerDAL底下一定要有个:MessageBoard类---//另外注意webconfig的那个命名空间
      

  8.   

    path的值如果断点测试正确是Div.SQLServerDAL 应该没问题
    就检查Bin里有没有相应的程序集
      

  9.   

    你将Bin目录下的相关dll删掉重新加载一次试试看,按你前面描述,要么是在Bin中没有加载相关的dll,要么是没有更新dll
      

  10.   

    项目-属性-程序集名称 Div.SQLServerDAL
      

  11.   


    这样的话你就定义两个巴<add name="path" connectionString="SQLServerDAL"/>
    <add name="space" connectionString="Div.SQLServerDAL"/>然后public static IMessageBoard CreatMessage() 

                
          string classname = ConfigurationManager.ConnectionStrings["space"].ConnectionString.ToString() + ".MessageBoard"; 
          return (IMessageBoard)Assembly.Load(path).CreateInstance(classname); 

      

  12.   

    或者项目-属性-程序集名称 Div.SQLServerDAL
    然后用 <add name="path" connectionString="Div.SQLServerDAL"/>