継承を処理できることが必要なアプリケーション用のシリアライゼーションシステムを構築しようとしています。問題をさらに複雑にするために、アプリケーションは拡張可能であるため、コンパイル時に型が分からない可能性があります。protobuf-net継承とフィールド番号
私は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のために上記のコードで使用されている場合...私の懸念があります AddSubTypeメソッドの引数。
プラグインが列挙されているので、私はSerialisationManagerとのフレームタイプを登録していると私は(私は任意の多数でそれを起動するので、私はする必要はありませんfieldNumberためのインクリメントカウンタを使用してモデルに追加します将来ベースクラスを拡張することを心配している)。
私はプラグインは、その後、異なる順序で列挙されているか、新しいものが追加されている(または削除)場合自動fieldNumberが、その後の共有で問題が発生します異なるサブタイプごとに異なることになるだろうされて生成されたことを心配していますプラグインが削除されている可能性があるユーザー(異なるプラグイン、したがってサブタイプを持つ可能性があります)または同じシステム上のファイル間のログファイル。
自動的に継承のこの種を扱うのと、将来的に互換性の問題を導入したりせずに任意の狡猾な方法はありますプラグインは、変更したり、私はこれらのfieldNumbersがContantをを維持する保証できる仕組みを考え出す必要がありますときすべてのインストールで?
何か助けや助言をいただければ幸いです。
私は、ウェブサイトにあるバージョン2のベータ版 - r480を使用していることを言いたいはずです。 – Anthony