Принудительный конструктор вызывается только из сериализации - PullRequest
2 голосов
/ 19 июля 2011

В нашей кодовой базе любые классы, которые должны быть сохранены, являются IXmlSerializable, это означает, что у них всех есть открытые конструкторы без параметров.

Проблема в том, что я должен прикрепить замечание над каждым "Только дляцели сериализации ", потому что определенные члены в этих экземплярах являются частными и обязательными, и, следовательно, требуются при вызове всех« пригодных для использования »конструкторов.

Что было бы действительно хорошо, так это способ сказать" Этот конструктор должен вызываться толькопутем сериализации кода / сборок, иначе я собираюсь взорваться ".Кто-нибудь знает, есть ли хороший способ сделать это?Единственный способ, которым я могу думать об этом, это проверка стека вызовов, почему это звучит слишком дорого ...

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

Как насчет:

    [Obsolete("Is your name XmlSerializer? No, I didn't think so.", true)]
    public Foo() { }

Примечание: это не защитит от отражения или обобщений с ограничением where T : new(), но позволяет избежать более вероятного сценария new Foo().

1 голос
/ 19 июля 2011

У меня есть для вас другое решение: уберите свой «приватный» конструктор из своего класса и используйте суррогат сериализации - так ваш магический конструктор никогда не будет использоваться вне сериализации, поскольку теперь он является частью процесс сериализации как таковой.

...