Я пытаюсь реализовать шаблон синглтона, но получаю сообщение об ошибке. Моя реализация выглядит функционально идентичной этому ответу и этому . Я использую класс вместо модуля, потому что он реализует интерфейс.
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