ดูเหมือนเป็นแนวทางมาตรฐานสำหรับ ioc เมื่อได้รับสถานการณ์เช่น (C# windsor):
container.AddComponent<ILogger, HttpLogger>();
container.AddComponent<ILogger, SmtpLogger>();
var logger = container.Resolve<ILogger>();
เป็นไปได้ว่าเมื่อแก้ไขส่วนประกอบ ILogger ที่ลงทะเบียนครั้งแรก (HttpLogger ในกรณีนี้) เป็นตัวเลือกเดียวสำหรับการแก้ไข จากนั้น ioc จะค้นหาตัวสร้างที่ 'อ้วนที่สุด' ที่สามารถทำได้โดยที่เชื่อว่าสามารถแก้ไขการอ้างอิงทั้งหมดได้
อย่างไรก็ตาม อาจเป็นไปได้ว่า ioc ไม่สามารถแก้ไขการขึ้นต่อกันสำหรับตัวบันทึกแรกได้ และจะกลับมาพร้อมกับปัญหาการแก้ไข อาจเป็นกรณีที่ SmtpLogger สามารถแก้ไขได้หาก ioc พยายามแล้ว
แล้วอะไรคือเหตุผลในการใช้บริการที่ลงทะเบียนครั้งแรกในฐานะผู้สมัครเท่านั้น? ดูเหมือนว่าความไม่แน่นอนว่าคุณจะได้รับประเภทใดนั้นเป็นข้อโต้แย้ง แต่แล้ว ioc ก็ถูกปล่อยให้รับผิดชอบว่าคอนสตรัคเตอร์ตัวไหนที่ใช้ต่อไป
ดังนั้นทำไมไม่เลือกจากตัวสร้างทุกประเภทที่เกี่ยวข้องทั้งหมด และเริ่มพยายามแก้ไขจากตัวสร้างที่อ้วนที่สุดลง (ผู้ไม่เชื่อเรื่องพระเจ้าของประเภทจริง)
นี่อาจมีคำตอบที่ชัดเจนมาก แต่จริงๆ แล้วฉันไม่รู้
ขอบคุณล่วงหน้าสตีเฟน