Sepertinya pendekatan standar untuk ioc ketika diberikan skenario seperti (C# windsor):
container.AddComponent<ILogger, HttpLogger>();
container.AddComponent<ILogger, SmtpLogger>();
var logger = container.Resolve<ILogger>();
Apakah ketika menyelesaikan komponen, ILogger terdaftar pertama (dalam hal ini HttpLogger) adalah satu-satunya kandidat untuk resolusi, ioc kemudian akan menemukan konstruktor 'paling gemuk' yang diyakini dapat menyelesaikan semua dependensi.
Namun, mungkin ioc tidak dapat menyelesaikan ketergantungan untuk logger pertama, dan karenanya akan kembali dengan masalah resolusi, bisa jadi SmtpLogger BISA diselesaikan jika ioc mencobanya.
Lalu apa alasannya hanya menggunakan layanan terdaftar pertama sebagai kandidat? tampaknya ketidakpastian tipe mana yang akan Anda dapatkan adalah sebuah argumen, tetapi ioc tetap bertanggung jawab atas konstruktor mana yang digunakannya.
Jadi mengapa tidak memilih dari semua konstruktor dari semua tipe yang berlaku, dan mulai mencoba menyelesaikan dari konstruktor yang paling gemuk (agnostik dari tipe sebenarnya)?
Ini mungkin memiliki jawaban yang sangat jelas tapi sejujurnya saya tidak mengetahuinya.
Terima kasih sebelumnya, Stephen.