将大型类从静态转换为非静态的步骤是什么?
本文关键字:静态 是什么 大型 转换 | 更新日期: 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
应该可以做到。
如果你想要更简单的东西,那么你应该从所有调用中获取通用参数,并将它们移到构造函数中。
对我来说似乎很简单。你对此有什么特别的意见吗?
我想你说的是,因为这是一个如此大的类,它不容易可视化如何做到这一点,所以你想要一些步骤遵循。是:
- 转换为单例 您需要通过替换每个术语来纠正引用静态类的位置
- 在你发现的所有这些地方,找出如何最好地注入
MyClass.instance()
依赖,而不是使用MyClass
全局引用它。 - 将类非单例化为规范类。您所做的DI工作应该可以轻松地从单例getter转换为普通构造函数。
- 现在开始一次使用多个实例,并修复由此导致的高级并发问题。
MyClass
和单一getter MyClass.instance()
。把所有这些地方都列在一张清单上,这样你就可以很容易地再次访问它们。在每一步之间运行您的测试框架