一次做Winform的数据查询页面. 使用的是原有的三层架构, 在Form1中直接使用工厂反射调用了IBLL接口类的方法. 运行后报错: "类型初始值设置引发异常"
感觉应该是新建项目Form1的问题, 因为该三层架构在另一个Winform程序中运行正常. 在另一个BS程序中也运行正常.
于是开始了修改, 具体过程如下(基本是自己的脑残行为记录, 建议直接看结尾):
1.怀疑是语句错误, 对比两个Winform程序的语句. 但没发现什么问题.
2.怀疑调用的静态变量需要在Form1的构造函数中初始化一次, 才能正常使用, 于是在Form1的构造函数末尾又给该IBLL静态变量进行了一次赋值, 没有效果
3.怀疑是Form必须完全加载后, 才能调用接口对象(怎么可能会有这种要求?). 于是在Form1中添加按钮, 在加载完Form后, 点击按钮创建IBLL接口对象, 调用方法, 继续报错.
4.怀疑Form的启动窗体不能调用接口(窗体都一样吧), 在Form1加载完后, 点击按钮打开Form2, 然后点击Form2的按钮, 创建IBLL对象,调用方法, 继续报错
5.没有办法, 直接调用BLL层方法, 追踪BLL层代码. 发现正常的Winform程序中, BLL中的实例化IDAL对象的语句都正常运行(这个BLL类中有7个IDAL接口变量), 而第二个程序在运行第一个创建IDAL对象语句后就直接跳出BLL页面. 问题就在这里了吧
6.直接在Form1中调用DAL层方法, 追踪断点, 在DAL层的初始化sql链接字符串语句的位置跳出, 发现DAL层中sql连接字符串是使用ConfigurationManager.....
好吧, 我新建的Winform程序没有写配置文件...
总结:
类型初始值引发异常, 采用事后诸葛理解法, 应该是指在我们调用的某一个对象或方法内的一个初始化语句发生了错误.
放在本案例中, 调用IBLL接口时, 初始化IBLL接口引发了异常, 而该异常是初始化IDAL接口引发的异常, 而IDAL接口初始化异常是由于DAL层中sql链接字符串的初始化引发的异常--没有对应的配置文件数据
接口的使用一定程度上提高了开发效率, 有利于团队开发, 但如果其中某一个环节出了问题, 又很难调试.
这次的问题在于, DAL层告诉UI层, 你需要一个config文件, 但俺忘了...
感觉应该是新建项目Form1的问题, 因为该三层架构在另一个Winform程序中运行正常. 在另一个BS程序中也运行正常.
于是开始了修改, 具体过程如下(基本是自己的脑残行为记录, 建议直接看结尾):
1.怀疑是语句错误, 对比两个Winform程序的语句. 但没发现什么问题.
2.怀疑调用的静态变量需要在Form1的构造函数中初始化一次, 才能正常使用, 于是在Form1的构造函数末尾又给该IBLL静态变量进行了一次赋值, 没有效果
3.怀疑是Form必须完全加载后, 才能调用接口对象(怎么可能会有这种要求?). 于是在Form1中添加按钮, 在加载完Form后, 点击按钮创建IBLL接口对象, 调用方法, 继续报错.
4.怀疑Form的启动窗体不能调用接口(窗体都一样吧), 在Form1加载完后, 点击按钮打开Form2, 然后点击Form2的按钮, 创建IBLL对象,调用方法, 继续报错
5.没有办法, 直接调用BLL层方法, 追踪BLL层代码. 发现正常的Winform程序中, BLL中的实例化IDAL对象的语句都正常运行(这个BLL类中有7个IDAL接口变量), 而第二个程序在运行第一个创建IDAL对象语句后就直接跳出BLL页面. 问题就在这里了吧
6.直接在Form1中调用DAL层方法, 追踪断点, 在DAL层的初始化sql链接字符串语句的位置跳出, 发现DAL层中sql连接字符串是使用ConfigurationManager.....
好吧, 我新建的Winform程序没有写配置文件...
总结:
类型初始值引发异常, 采用事后诸葛理解法, 应该是指在我们调用的某一个对象或方法内的一个初始化语句发生了错误.
放在本案例中, 调用IBLL接口时, 初始化IBLL接口引发了异常, 而该异常是初始化IDAL接口引发的异常, 而IDAL接口初始化异常是由于DAL层中sql链接字符串的初始化引发的异常--没有对应的配置文件数据
接口的使用一定程度上提高了开发效率, 有利于团队开发, 但如果其中某一个环节出了问题, 又很难调试.
这次的问题在于, DAL层告诉UI层, 你需要一个config文件, 但俺忘了...