2010-04-01 2 views
0

Я разрабатываю приложение .NET framework, которое позволяет пользователям поддерживать и сохранять «проекты». Проект может состоять из компонентов, типы которых определены в сборках самой структуры и/или в сторонних сборках, которые будут доступны для платформы через еще не построенную подключаемую архитектуру. Когда проект сохраняется, он просто двоично-сериализован для файла.Типы обработки, определенные в плагинах, которые больше не доступны

Проекты переносимы, поэтому несколько пользователей могут загружать один и тот же проект в свои собственные экземпляры фреймворка (так же, как разные пользователи могут открывать один и тот же документ MSWord в своих локальных копиях MSWord). Более того, плагины, доступные в рамках одного пользователя, могут быть недоступны для других.

Мне нужен способ гарантировать, что когда пользователь попытается открыть (то есть deserialise) проект, который включает в себя тип, чья определяющая сборка не может быть найдена (из-за несовместимости версии рамки или отсутствия плагина) , проект по-прежнему открывается, но оскорбительный тип каким-то образом заменен или опущен. Проблема в том, что исследования, которые я сделал до настоящего времени, даже не намекают на подходящий подход. Любые идеи были бы очень благодарны, спасибо.

ответ

0

Вам нужно будет сделать свой собственный сериализатор, используя отражение.

+0

Да, я подумал об этом, но на самом деле не хотел туда ехать. Тем не менее, мне также необходимо уменьшить сериализованный след проекта - еще одна причина для сериализатора на заказ. Спасибо за ответ. – Chris

0

Эта проблема сильно зависит от вашей архитектуры. Интерфейсы и зависание используются для создания «подключаемой» архитектуры, которую вы описываете, но только вы можете определить, как «восстановить» из недоступных определений типов. Ваш дизайн должен учитывать тот факт, что любой компонент проекта может не загружаться.