2

以下の文と以下の質問は私自身の経験に基づいていますが、間違っているものがある場合は、自由に指摘できます。実際、私は本当にそれを感謝します。IoCコンテナがビジネスロジックシングルトンのシリアル化を処理するべきではありませんか?

ほとんどすべてのアプリケーションアーキテクチャでは、開発者はIoCコンテナで解決されたクラスインスタンス、つまりInSingletonScope()(Ninjectから取得した用語ですが、ほとんどの場合、その意味を理解しています)を使用します。

たとえば、ICloudStorageProviderの実装には、必要なクラスインスタンスの例を挙げることができます。

ICloudStorageProvider実装インスタンスは、私が必要な時はいつでも今のところ、私はLocalStorageProvider.SaveLoginData(...)のようなメソッドを呼び出してきた、ネストされたLoginDataクラス、あるいは単なるログインとパスワードフィールドの形でクラウドアカウントへのログインデータを含んでいる場合はそれを維持する。方法を知っていた別のクラスが、クラスインスタンスのデータを保存しました。

メカニズムがあれば、ローカルデータストアにこのような「シングルトン」オブジェクトのインスタンス全体をシリアル化してから、アプリケーションを再起動するか、またはアイデンティティが必要になる再度、上の例のログイン・データとともにそれを逆直列化するだけです。

そして、IoCコンテナはオブジェクトのインスタンシエーションを担当するものであるため、このような責任のためには完全に一致するようです。

IoCとシリアライザの両方として機能するそのようなメカニズムはありますか?

答えて

1

あなたはなぜこのようなことをしたいのか分かりませんが、カスタムライフタイムスタイルとして最もよくモデリングされるように私には聞こえます。基本的には、を超えてシングルトンを超え、複数のコンテナインスタンスにまたがるライフスタイルです。

しかし、ほとんどの場合、シングルトンサービスはステートレスになりがちですが、シリアルサービスをシリアル化することはあまり意味がありません。

Ninjectのカスタムライフタイムを書くことができるかどうかは言えませんが、カスタムライフタイムはCastle Windsor,StructureMapUnityでサポートされています。

関連する質問は正確ですどのようにあなたは任意のオブジェクトグラフをシリアル化しますか? .NETでは、最も簡単な方法は組み込みバイナリシリアライザを使用することですが、グラフのすべてのオブジェクトに[Serializable]属性を付けるか、ISerializableを実装する必要があります。他にもオプションがありますが、ほとんどの場合、オプトインメカニズムが必要なので、どのサービスをシリアル化できるかが厳しく制限されています。

関連する問題