(C#windsor)のようなシナリオが与えられた場合、iocの標準的なアプローチのように見えます。
container.AddComponent<ILogger, HttpLogger>();
container.AddComponent<ILogger, SmtpLogger>();
var logger = container.Resolve<ILogger>();
コンポーネントを解決するとき、最初に登録されたILogger(この場合はHttpLogger)が解決の唯一の候補であり、iocは、すべての依存関係を解決できると信じる場所で「最も太い」コンストラクターを見つけます。
ただし、iocが最初のロガーの依存関係を解決できない可能性があり、したがって解決の問題が返されます。iocが試行した場合、SmtpLoggerが解決された可能性があります。
では、最初に登録されたサービスのみを候補として使用する理由は何ですか?どのタイプを取得するかは議論の余地があるようですが、とにかく使用するコンストラクターはiocが担当します。
では、適用可能なすべての型のすべてのコンストラクターから選択して、最も太いコンストラクターから(実際の型にとらわれずに)解決しようと試みてみませんか?
これは本当に明白な答えがあるかもしれませんが、正直なところ私はそれを知りません。
スティーブン、よろしくお願いします。