如何从遗留代码中删除共享变量

时间:2012-03-23 14:52:37

标签: c# .net refactoring data-access-layer legacy-code

在系统中,有一个包含共享实例的当前登录用户(我们自己的用户而不是Windows用户)的单例。

在几百个数据访问类文件中,这用于为发送到数据库的每个请求设置CreatebyID和EditbyID。几乎所有的类都继承了一个基类,尽管目前在每个类中都设置了两个值。

这对于公司桌面应用程序多年来一切正常,但是当在新的Web应用程序中使用相同的数据访问类时,当前记录的用户在所有用户会话中共享,并且在不引起问题的情况下无法更改。

如何在不显着重写整个DAL的情况下重构代码,并且不会将当前用户(或用户ID)传递到每个实例中,或者为每次保存在每个类上设置EditbyID属性。

1 个答案:

答案 0 :(得分:1)

您可以使用通过HttpContext.Current.Session获取/设置Session变量的静态属性。

例如:

public class DAL
{
    public static int CreatebyID
    {
        get
        {
            return (int)HttpContext.Current.Session["CreatebyID"];
        }
        set
        {
            HttpContext.Current.Session["CreatebyID"] = value;
        }
    }
    public static int EditbyID
    {
        get
        {
            return (int)HttpContext.Current.Session["EditbyID"];
        }
        set
        {
            HttpContext.Current.Session["EditbyID"] = value;
        }
    }
}