首页 新闻 会员 周边

单例模式中static的作用范围

0
悬赏园豆:20 [已解决问题] 解决于 2009-03-09 10:35
private Module()
{

}

private static Module Sigleton = null;
public List<PGGSOA.COMMON.Components.sys_ModuleTable> _list = null;
static readonly object padlock = new object();
public static Module Instance()
{
if (Sigleton == null)
{
lock (padlock)
{
if (Sigleton == null)
{
Sigleton
= new Module();
Sigleton.GetModuleList();
}
}
}
return Sigleton;
}

private void GetModuleList()
{
_list
= ModuleAllList();
}

private void Refresh()
{
GetModuleList();
}

/// <summary>
/// 返回对应的应用所有模块代码
/// </summary>
/// <returns></returns>
public static List<PGGSOA.COMMON.Components.sys_ModuleTable> ModuleAllList()
{
return PGGSOA.DAL.Module.ModuleAllList();
}

为的就是把sys_ModuleTable保存在内存中,当有新增、修改或者删除的时候,通过调用

Module md=new Module();
 md.Refresh();

来进行对_list的更新,可是在此处显示记录已经有更改。但是在页面中应用的时候却没有变化,页面代码如下:

 

List<PGGSOA.COMMON.Components.sys_ModuleTable> listModule = new List<PGGSOA.COMMON.Components.sys_ModuleTable>();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
PGGSOA.BLL.Module bm
= PGGSOA.BLL.Module.Instance();
listModule
= bm._list;//此处却获取不到更新后的_list,请教这是为什么?
}
}

        
caitou的主页 caitou | 初学一级 | 园豆:0
提问于:2009-03-07 21:18
< >
分享
最佳答案
0

恩 我看了一下你的代码, 好费尽才看懂。

_list是bm的成员,不是static的,所以这个问题好像和static没有关系。

你在Module里面用了一个单件,也就是说你的_list在.Instance()之后会被构造,但是更新的时候就不可以了阿,除非显式调用bm.Refresh();

我向页面代码如果是这样子或许能达到效果:

            if (!IsPostBack)
           {
              PGGSOA.BLL.Module bm
= PGGSOA.BLL.Module.Instance();
              bm.Refresh();

      listModule = bm._list;
            }

StevenChennet | 初学一级 |园豆:23 | 2009-03-07 21:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册