首页 新闻 会员 周边

通过配置文件反射得到对象问题

0
悬赏园豆:100 [已关闭问题] 关闭于 2011-11-13 22:41

做了一个父窗体
父窗体里面有一个字段(我把这个字段公共了)是一个对象字段,,这个对象是通过配置文件反射得到的。
我在父窗体创建了这个对象

然后写了个子窗体继承这个父窗体,但是子窗体的设计出错。如果把父窗体的那个通过反射得到对象的字段注释了,子窗体就完全没问题。

如果子窗体需要用到那个通过反射得到的对象,子去创建,也步会有问题。

小弟请问大侠们,为什么在父窗体创建就会报错呢?

 

 1 //父窗体的构造函数
2 public UserStateService userStateService = null;//这个对象因为有几个子窗体也要用到这个对象,所以开始的我的想法是把这个对象放在父窗体里面创建
3
4 public BaseEditTeacehrForm()
5 {
6 InitializeComponent();
7
8 userStateService = new UserStateService();
9 }
10
11 // 父类里面的UserStateService的构造函数如下
12 public UserStateService()
13 {
14 userStateDao = DAOFactory.CreateUserState();//工厂通过配置文件反射创建对象
15 }
16
17 //工厂里面创建dao的具体过程
18 public static IUserStateDao CreateUserState()
19 {
20 string typeName = ConfigurationManager.AppSettings["IUserStateDao"];
21 IUserStateDao userStateDao = (IUserStateDao)Activator.CreateInstance(Type.GetType(typeName));
22
23 return userStateDao;
24 }
25
26
27 //整个创建过程都没有问题,但问题就是父窗体的userStateService = new UserStateService();,如果这行注释了,就完全没问题,子窗体需要UserStateService这个对象,自己去通过工厂反射。但是如果是在父窗体工厂去反射创建。就有如下问题(截图)。
28 //我不明吧为什么会有这样的错。就不能在父窗体通过工厂发射创建我们需要的对象吗?如果这个对象不是反射创建的话,也不会有问题


//不能插入图片。错误在子窗体的窗体设计那里。编译可以通过,程序也能运行,就窗体设计出错!
//请教这个是什么问题,需要源码的,可以留下邮箱,小弟在此先谢谢大家了
MeDuke的主页 MeDuke | 初学一级 | 园豆:44
提问于:2011-11-13 21:37
< >
分享
所有回答(1)
1

解决了,在设计时,反射不起作用。我们在工厂那个把创建过程try起来,重新编译,不行的话,关掉vs重新启动,即可

View Code
string typeName = ConfigurationManager.AppSettings["IUserStateDao"];
IUserStateDao userStateDao = null;
try
{
userStateDao = (IUserStateDao)Activator.CreateInstance(Type.GetType(typeName));
}
catch
{ }
return userStateDao;


public BaseEditTeacehrForm()
{
InitializeComponent();

if (!IsDesignModel())
{
userStateService = new UserStateService();
}
}

/// <summary>
/// 判断是否是设计模式
/// </summary>
/// <returns></returns>
public bool IsDesignModel()
{
return System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToLower() == "devenv";
}

 

另一种方案

MeDuke | 园豆:44 (初学一级) | 2011-11-13 22:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册