2

IInterface などのインターフェイスを実装するオブジェクトを保存しようとしています。

private PersistentDictionary<string, IInterface> Object = new PersistentDictionary<string, IInterface>(Environment.CurrentDirectory + @"\Object");

多くのクラスが同じインターフェイスを実装しているため (すべてキャッシュする必要があります)、一般的なアプローチとして、IInterface 型のオブジェクトをディクショナリに格納します。
そのため、そのオブジェクト型を引き出して IInterface としてキャストし、そのオブジェクトのメソッドの内部実装などを使用できます。

しかし、Esent キャッシュが初期化されるとすぐに、次のエラーがスローされます:
SetColumn
パラメータ名: TColumn
実際の値は IInterface でした。

同じことを行うために使用XmlSerializerしないようにしましたが、インターフェイス タイプを逆シリアル化できません。また、インターフェイスの上で[Serializable]属性を使用できないため、行き詰まっています。

また、インターフェイスのすべての実装 (クラス) を[Serializable]死にかけた試みとして作成しようとしましたが、役に立ちませんでした。

誰でも抜け道を知っていますか?前もって感謝します !!!

4

2 に答える 2

1

PersistentDictionary は、値構造体と非常に限られたクラスのサブセット (文字列、Uri、IPAddress) のみを格納できます。完全な制限については、ColumnConverter.cs の private static bool IsSerializable(Type type) を参照してください。typeinfo.IsValueType() 制限にぶつかるでしょう。

ちなみに、PersistentDictionary に関する質問をhttp://managedesent.codeplex.com/discussionsに投稿することもできます。

-マーティン

于 2013-01-10T08:01:55.070 に答える