大規模なソリューション (> 100 プロジェクト) があり、ほぼすべてのタイプがインスタンス化のためにサービス ロケーター (例 1) または独自のタイプ ディクショナリ (例 2) のいずれかを使用します。
たとえば、次のようなものがあります。
IQuote quote = Registry.Resolve<IQuote>();
また
IQuote quote = Registry.Find<IQuote>(args);
2 番目の例では、構成ファイルに移動して、リフレクションを使用してインスタンス化する具体的なオブジェクトを見つけます。
コードをたどる場合、どの具象型が使用されているかが明確でないため、作業がより困難になります。そのため、コードの一部を学習しようとするときに、マッピングを何度も確認する必要があります。上記を例として使用すると、F12 on:quote.DoSomething()
を押すと、インターフェース定義に移動します。
また、実装が少し難しくなります。代替手段が 1 つのクラスだけの場合、インターフェイス + 具象クラス + 構成マッピングが必要です。
考えてみると、何かが別の型に「交換」されたことはありません。したがって、IoC を実装しましたが、それを使用していないか、少なくともほとんど使用していません。
それで-それは実際に価値がありますか?実装が間違っていたり、やりすぎたりしていませんか? 私は何か誤解していますか?