将大型类从静态转换为非静态的步骤是什么?

本文关键字:静态 是什么 大型 转换 | 更新日期: 2023-09-27 18:10:31

我有一个相当大的开源类,我需要将其从静态转换为非静态。

我需要这样做的原因是使它线程安全;我希望每个线程都有一个类的副本。

一般来说,将c#库从静态转换为非静态的建议步骤是什么?

将大型类从静态转换为非静态的步骤是什么?

我已经将Data Layer从静态类升级为无静态类。所以

第一步:删除类和方法上的static关键字

第二:在旧的静态类中也添加一个Singleton

public class Foo 
{
    #region Singleton
    Foo()
    {
    }
    public static Foo Instance
    {
        get
        {
            return Nested.instance;
        }
    }
    class Nested
    {
        static Nested() { }
        internal static readonly Foo instance = new Foo();
    }
    #endregion

第3条:用Foo.Instance.DoSomething()代替Foo.DoSomething()

4:编译和盈利

让它编译?从所有成员中删除static应该可以做到。

如果你想要更简单的东西,那么你应该从所有调用中获取通用参数,并将它们移到构造函数中。

对我来说似乎很简单。你对此有什么特别的意见吗?

我想你说的是,因为这是一个如此大的类,它不容易可视化如何做到这一点,所以你想要一些步骤遵循。是:

  1. 转换为单例
  2. 您需要通过替换每个术语来纠正引用静态类的位置MyClass和单一getter MyClass.instance()。把所有这些地方都列在一张清单上,这样你就可以很容易地再次访问它们。
  3. 在你发现的所有这些地方,找出如何最好地注入MyClass.instance()依赖,而不是使用MyClass全局引用它。
  4. 将类非单例化为规范类。您所做的DI工作应该可以轻松地从单例getter转换为普通构造函数。
  5. 现在开始一次使用多个实例,并修复由此导致的高级并发问题。

在每一步之间运行您的测试框架