0
我试图实现单例模式,但收到错误。我的实现看起来功能上与this answer和this one相同。我使用的是类而不是模块,因为它实现了一个接口。实现单例模式时出错(在相互递归类型中)
type SystemObjectFactory private() =
static let instance = lazy (SystemObjectFactory())
static member Instance = instance.Value //ERROR
唯一的例外是:
System.InvalidOperationException:一个文件或类型的静态初始化导致的静态数据进行递归访问它完全初始化之前。
我该如何解决这个问题?
作为一个方面说明,我不知道为什么下面的(我喜欢)无法正常工作或:
type SystemObjectFactory private() =
static let instance = SystemObjectFactory()
static member Instance = instance
UPDATE
我可能已经发现了这个问题。这个类正在从一个相互递归类型的静态构造函数中引用。显然,这是.NET中黑暗和禁止的魔法。
更多背景:
type Entity() =
static do
Bootstrapper(SystemObjectFactory.Instance).Init() //PURE EVIL
and SystemObjectFactory private() =
static let instance = SystemObjectFactory()
static member Instance = instance
我更新了问题。我需要提供更多的背景......我认为我发现了这个问题。现在,要弄清楚如何最好地重构... – Daniel 2011-03-24 19:53:16
哈!那样做了。现在它只是有点邪恶。谢谢。 – Daniel 2011-03-24 20:01:10
不客气!更新答案以反映恶意降级。 – 2011-03-24 20:06:29