Как сохранить / загрузить одноэлементный класс - PullRequest
1 голос
/ 19 декабря 2011

У меня есть объект конфигурации в моем приложении .NET CF, и я хочу использовать для этого синглтон. Конфигурация может быть изменена и должна быть сохранена / восстановлена ​​для следующего запуска приложения. Я хочу использовать сериализацию / десериализацию xml, она также предоставляет возможность изменять конфигурацию через файл XML. Вопрос в том, как сохранить и восстановить синглтон? Десериализация создает новый экземпляр одноэлементного класса, но это означает, что в настоящий момент это будет два экземпляра одноэлементного класса.

Я нашел решение с интерфейсом ISerializable, но кажется, что оно не работает с компактной структурой http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable%28v=VS.90%29.aspx

Есть ли способ получить такое же поведение с .NET CF?

1 Ответ

3 голосов
/ 19 декабря 2011

Ваш синглтон, скорее всего, использует частный конструктор в своем шаблоне.Таким образом, вы бы сделали что-то вроде этого:

public class MySingleton
{
    private static MySingleton m_instance;

    private MySingleton() { }

    public static MySingleton Instance 
    { 
        get 
        {
             if(m_instance == null)
             {
                 // hydrate m_instance from serialized version
             } 
             return m_instance; 
        }
    }
}

или это:

public class MySingleton
{
    private static MySingleton m_instance;

    private MySingleton() 
    {
        // load data from config file 
    }

    public static MySingleton Instance 
    { 
        get 
        {
             if(m_instance == null)
             {
                 m_instance = new MySingleton();
             } 
             return m_instance; 
        }
    }
}
...