Создание объекта управления при десериализации
Я хотел бы контролировать создание объектов типа, который обычно не сериализуется во время десериализации с использованием NetDataContractSerializer (или любого сериализатора, который я предполагаю). Используя пользовательский SerializationBinder, я могу управлять созданным типом и использовать пользовательские ISurrogateSelector и ISerializationSurrogate, чтобы управлять тем, как состояние устанавливается для объекта.
Что я не могу сделать, так это создать объект самостоятельно, чтобы разрешить использование внедрения зависимости или чего-то еще. Объект, который вызывает проблемы, находится внутри графа объектов, поэтому я не могу редактировать его до сериализации.
Есть ли способ, позволяющий моему коду создавать десериализованный объект?
(Для фона я пишу пользовательское хранилище экземпляров персистентности WF4 на основе XmlWorkflowInstanceStore в примерах WF. Я хочу создать рабочие процессы, которые имеют переменные, которые являются интерфейсами... и конкретные типы не могут быть созданы напрямую. XmlWorkflowInstanceStore является единственным Пример, который я могу найти с пользовательским постоянством, и он использует NetDataContractSerializer для сериализации состояния рабочего процесса.)
2 ответа
Я знаю, что этот вопрос старый, но вы искали GetSafeUninitializedObject
?
Я постоянно сталкиваюсь с этой проблемой. Обычно я сам реализую ISerializable и устанавливаю все зависимости с помощью метода (названного, например, SetDependencies) - это не совсем то, что вам может понадобиться (потому что вы должны вызывать его после десериализации), но я пока не нашел лучшего способа (попробовал АОП но все пошло противно)