IoCコンテナをカプセル化するために余分な労力を費やすことが理にかなっているかどうかを判断しようとしています。経験によれば、アプリとサードパーティコンポーネントの間にカプセル化のレイヤーを配置する必要があります。これがやり過ぎに隣接しているかどうかはわかりません。
コンテナを切り替えたいと思う状況が思い浮かびます。たとえば、現在のコンテナのメンテナンスが中止されたり、別のコンテナの方が軽量でパフォーマンスが高く、ニーズに合っていることが証明されています。これが発生した場合、私は潜在的に多くの再配線を行う必要があります。
明確にするために、私はタイプの登録と解決のカプセル化を検討しています。解決策をカプセル化するのは簡単だと思います。ヘルパー/utilクラスをコンテナに委任するのが一般的な方法だと思います。
編集:
型の安全性、コンパイル時のチェック、およびリファクタリング性のために、プログラムで型を接続することを好むことが前提です。私が自分自身を保護しようとしているのは、このコードとコンテナーへの依存関係です。
同じ関係を共有する他のいくつかのプロジェクトにもIoCコンテナーを使用していますが、コンテナーを操作するのは面倒なので、変更したいと思います。ただし、変更すると、登録コードの再利用性が失われます。したがって、なぜ私はカプセル化を考えているのですか。それは大きな負担ではありませんが、それでも私が軽減したいものです。
私が探しているのは:
- コンテナ/コンテナのバージョンの変更による影響を最小限に抑える
- 異なるコンテナを使用する可能性のあるプロジェクト全体で、ある程度のタイプ登録の一貫性を提供します
- 私にとって意味のあるインターフェースメソッドを提供します(RegisterType <T、T>(SomeLifetimeProvider)ではなくRegisterSingleton <T、T>-例としてUnityを使用)。
- 条件/スケーラビリティ要件の変化に応じてコンテナを拡張します。たとえば、解決/登録中にキャッシュやロギングなどを追加します。
- タイプマッピングを登録するための独自のモデルを提供します。
- アセンブリ/パッケージにRegistrationHandlerオブジェクトの束を作成したいとします。そうすれば、登録の責任を複数のクラスに簡単に分離し、他の場所でコードを変更することなく、これらのハンドラーを自動的に取得できます。
これは少し主観的なことだと思いますので、賛否両論が役立つかもしれません
ありがとう!