【发布时间】:2012-02-14 13:57:20
【问题描述】:
我正在尝试为我们的应用程序构建一个必须能够处理继承的序列化系统。更复杂的是,应用程序是可扩展的,因此在编译时可能不太可能知道类型。
我已经阅读了previous stackoverflow question 得到了答复,这帮助我实现了目标,但我遇到了一个绊脚石,可能更多的是缺乏理解而不是任何实际问题!
所以这是我目前的代码......
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 em> AddSubType 方法的参数。
当插件被枚举时,我正在使用 SerialisationManager 注册它们的帧类型,并使用 fieldNumber 的递增计数器将它们添加到模型中(我以任意大的数字开始,所以我不不必担心将来扩展基类)。
我担心如果插件以不同的顺序枚举或添加(或删除)新插件,那么自动生成的 fieldNumber 对于不同的子类型将会有所不同,然后导致在用户(可能有不同的插件,因此有不同的子类型)甚至同一系统上的文件之间共享日志文件时出现问题,当插件可能已被删除时。
是否有任何巧妙的方法可以自动处理这种继承,而不会在将来引入兼容性问题,或者当插件发生变化时,或者我是否需要想出一种机制来处理这些 fieldNumbers保证在所有安装中保持不变?
任何可以提供的帮助或建议将不胜感激!
【问题讨论】:
-
刚刚意识到我应该提到我正在使用网站上的版本 2 的测试版 - r480。
标签: c# .net protocol-buffers protobuf-net