静态初始化模式

Aci*_*dic 0 c# initialization

通过静态init方法初始化静态字段的最佳方法是什么,然后确保永远不再调用该方法?(在计划有效期内不超过一次)

这是我目前想到的一个例子,对我来说似乎很简单,但我找不到任何类似模式的例子来解决这个问题:

class Entity
{
    static Manager manager;
    static bool isInitialized;

    public static void Initialize(Manager manager)
    {
        if (isInitialized)
            throw Exception("Class Entity already initialized."
                 + "Do not call Entity.Initialize() twice.");
        isInitialized = true;
        Entity.manager = manager;

    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

通过静态init方法初始化静态字段的最佳方法是什么,然后确保永远不再调用该方法?

你真的必须这样做吗?为什么你不想创建一个实例Manager并使其可用于通过依赖注入依赖它的代码?这将使您的代码更清洁:

  • 您可以使用不同的初始化路径来测试它
  • 您不需要检查"错误"重复初始化
  • 您不需要构造调用代码来为此类指定单个初始化点.(当然,您可能需要为IoC容器做类似的事情......)
  • 您允许依赖它的代码也更容易测试
  • 依赖的代码Manager将以更清晰的方式表达依赖性

我怀疑你没有找到任何类似的例子,因为它是一个反模式.

如果您确实采用当前的方法,那么您应该尝试使其成为线程安全的......