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

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

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

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

多年来,这对于公司的桌面应用程序来说都运行良好,但是当在新的网络应用程序中使用相同的数据访问类时,当前登录的用户在所有用户 session 中共享,并且无法在不引起问题的情况下进行更改。

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

最佳答案

您可以使用静态属性,通过 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;
        }
    }
}

关于c# - 如何从遗留代码中删除共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841345/

相关文章:

c# - 菜单项的工具提示被子菜单下拉列表隐藏

c# - LINQ To SQL 能否检测到表关联中断的位置?

c# - Visual Studio 连接字符串- 相对文件路径?

c# - C# 中的序列化和对象版本控制

sql-server - 表和存储过程的大规模重命名

typescript - 在 Visual Studio Code 中提取 TypeScript 方法

c# - 等待 Selenium Webdriver 更改的最佳实践?

c# - C 源代码到 DLL 以便在 C# 应用程序中使用

c# - 如何创建事件( Canvas 移动)C# WPF?

c++ - 重构:让游戏引擎更加模块化以及如何重构