Я пытаюсь создать систему сериализации для нашего приложения, которая должна уметь обрабатывать наследование.Чтобы еще больше усложнить задачу, приложение расширяемо, поэтому очень маловероятно, что типы будут известны во время компиляции.
Я прочитал предыдущий вопрос stackoverflow , на который был дан ответ и который помог мне получитьДолгий путь к моей цели, но я наткнулся на камень преткновения, который, скорее всего, является скорее недостатком понимания, чем какой-либо реальной проблемой!
Так вот код, который у меня есть в настоящее время ...
public interface IBaseFrame
{
}
public class BasicDataFrame : IBaseFrame
{
}
public class AnotherFrame : BasicDataFrame
{
}
.,,.
RuntimeTypeModel model = TypeModel.Create();
MetaType baseType = model.Add(typeof(IBaseFrame), true);
MetaType basicFrameType = model.Add(typeof(BasicDataFrame),true);
baseType.AddSubType(7, typeof(BasicDataFrame));
model.Add(typeof(AnotherFrame), true);
basicFrameType.AddSubType(8, typeof(AnotherFrame));
Теперь этот код работает правильно (насколько я могу судить!) И все хорошо в мире ... Меня беспокоит то, где значения 7 и 8 используются в приведенном выше коде дляаргумент fieldNumber метода AddSubType.
По мере перечисления плагинов я регистрирую их типы фреймов с помощью SerialisationManager и добавляю их в модель с увеличивающимся счетчиком для fieldNumber (я начинаю его с произвольно большого числа, поэтому мне не нужно беспокоиться о расширении базовых классов в будущем).
Я обеспокоен тем, что, если плагины перечислены в другом порядке или добавлены (или удалены) новые, то автоматически сгенерированный fieldNumber будет отличаться для разных подтипов, которыеЭто приведет к проблемам с общим доступом к файлам журналов между пользователями (которые могут иметь разные плагины и, следовательно, подтипы) или даже файлами в той же системе, когда плагин мог быть удален.
Есть ли какой-нибудь хитрый способ справиться с этимтип наследования автоматически и без возникновения проблем совместимости в будущем или при смене плагинов, или мне нужно придумать механизм, в котором эти fieldNumbers могут гарантированно оставаться неизменными во всех установках?
Буду очень признателен за любую помощь или совет!