3 つのイディオムの違いについては、多くの投稿をお読みください。しかし、さらに混乱して、次の記事に出くわしました: http://martinfowler.com/articles/injection.html
これが正しいかどうかを確認したいだけです。私が間違っている場合は修正してください。訂正・追加をお知らせください:
IoC は、アプリケーションが使用するサービスの実装からアプリケーションを切り離すという概念です。アプリケーションには Iservice への参照が含まれており、具体的なサービスのインスタンス化は担当していません。
これを実現するには、少なくとも 2 つの方法があります。
DI - 具体的なサービスは、ctor パラメータとして注入される/setter をスローする/インターフェース注入をスローする (後者はどういう意味ですか? )
ServiceLocator - アプリケーションが必要とする可能性のあるすべての具体的なサービスを認識するコンポーネントです。アプリケーションは、Locator から具体的なサービスを明示的に要求します。
*IoC コンテナーは、実際にはコントロールのファクトリー (「プロバイダー」) です。
この記事の「いつ (1) または (2) を選択するか」という部分に少し混乱しました。誰かが自分の経験から素人の言葉で教えてもらえますか?
「Service Locator は、より単純な動作のため、わずかに優れています。ただし、複数のアプリケーションで使用するクラスを構築する場合は、依存性注入を選択することをお勧めします。」--> locator はどのようにより単純なのか? メソッド呼び出しを明示的に使用するためですか?複数のアプリケーションがある場合、DI を使用すると何が良いでしょうか?