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