数十の「高レベル」インターフェイス (コンポーネント レベルを意味する) を実装する数百のクラスを持つアプリケーションがあるとします。依存性注入を行うための推奨される方法はありますか (unity のように)。シングルトンとしてアクセス可能な、ブートストラップに使用できる「一般的なコンテナ」が必要ですか? すべてのインスタンスが RegisterInstance できるコンテナを渡す必要がありますか? スタートアップのどこかで RegisterType によってすべてを行う必要がありますか? 必要なときにコンテナにアクセスできるようにする方法。コンストラクター インジェクションは間違っているように見えます。標準的な方法であることに反論があります。インターフェイスをコンポーネント レベルから起動時にすぐに使用される一番下まで渡す必要があるか、参照が保持されて「どこに住んでいるかを知る」アンチパターンになってしまいます。 . そして:コンテナを「利用可能」にする 開発者は、サーバー コンポーネントをクライアント コンテキストで解決するという考えにたどり着く可能性があります。それを避ける方法は?
どんな議論でも大歓迎です!
明確にするために編集
私が見ている問題をよりよく理解するために、やや現実的な例を見つけました。
アプリケーションがハイファイ システムであると想像してみましょう。システムには、音楽を再生するための CD プレーヤー (CD ラックに統合) と USB ポート (USB ラックに統合) があります。
これで、CD プレーヤーと USB ポートで mp3 音楽を再生できるようになります。
私は注射可能なmp3デコーダーをどこかに持っています。
今、私はハイファイシステムを開始します。まだ CD が挿入されておらず、USB スティックが接続されていません。mp3 デコーダーは今は必要ありません。
しかし、コンストラクター注入では、CD ラックと USB ラックに依存関係を既に注入する必要があります。
mp3 CD や mp3 USB スティックを挿入しないとどうなりますか?
リファレンスを CD ラックに保持して、MP3 CD が挿入されたときにデコーダーを手元に用意しますか? (私には間違っているようです)
デコーダーは、mp3 が挿入された場合にのみ開始される cd ラックのサブシステムで必要です。CD ラックにコンテナーがありません。ここでコンストラクター インジェクションはどうですか?