ฉันขอโทษถ้าสิ่งนี้ดูเหมือนจะเป็นคำถามที่เกิดขึ้นซ้ำแล้วซ้ำอีก แต่ทุกครั้งที่ฉันพบบทความเกี่ยวกับหัวข้อนั้นส่วนใหญ่จะพูดถึงว่า DI คืออะไร ดังนั้นฉันได้รับ DI แต่ฉันพยายามที่จะเข้าใจความต้องการภาชนะ IoC ซึ่งทุกคนดูเหมือนว่าจะเข้ามา จุดประสงค์ของคอนเทนเนอร์ IoC จริง ๆ แล้วเป็นเพียง "การแก้ไขอัตโนมัติ" การใช้งานที่เป็นรูปธรรมของการพึ่งพาหรือไม่ บางทีชั้นเรียนของฉันมีแนวโน้มที่จะไม่ได้ขึ้นต่อกันหลายครั้งและนั่นอาจเป็นเหตุผลว่าทำไมฉันไม่เห็นเรื่องใหญ่ แต่ฉันต้องการให้แน่ใจว่าฉันเข้าใจถึงประโยชน์ของภาชนะอย่างถูกต้อง
โดยทั่วไปแล้วฉันแบ่งตรรกะทางธุรกิจของฉันออกเป็นคลาสที่อาจมีลักษณะเช่นนี้:
public class SomeBusinessOperation
{
private readonly IDataRepository _repository;
public SomeBusinessOperation(IDataRespository repository = null)
{
_repository = repository ?? new ConcreteRepository();
}
public SomeType Run(SomeRequestType request)
{
// do work...
var results = _repository.GetThings(request);
return results;
}
}
ดังนั้นมันจึงมีการพึ่งพาเพียงหนึ่งเดียวและในบางกรณีมันอาจมีสองหรือสาม แต่ไม่ใช่ทั้งหมดที่มักจะ ดังนั้นสิ่งที่เรียกว่าสิ่งนี้สามารถส่งผ่าน repo ของตัวเองหรืออนุญาตให้ใช้ repo เริ่มต้น
เท่าที่ความเข้าใจปัจจุบันของฉันเกี่ยวกับคอนเทนเนอร์ IoC จะเป็นคอนเทนเนอร์ทั้งหมดจะแก้ไข IDataRepository แต่ถ้านั่นคือทั้งหมดที่ทำฉันก็ไม่เห็นคุณค่ามากมายเลยตั้งแต่ชั้นเรียนปฏิบัติการของฉันได้กำหนดทางเลือกไว้เมื่อไม่มีการพึ่งพาผ่านดังนั้นประโยชน์อื่น ๆ ที่ฉันคิดได้คือถ้าฉันมีการดำเนินการหลายอย่างเช่น ใช้ repo ทางเลือกเดียวกันฉันสามารถเปลี่ยน repo นั้นในที่เดียวซึ่งเป็นรีจีสทรี / คอนเทนเนอร์ / และมันก็เยี่ยม แต่ก็ใช่มั้ย
ConcreteRepository
และ (2) คุณสามารถจัดหาการพึ่งพาเพิ่มเติมให้กับConcreteRepository
(การเชื่อมต่อฐานข้อมูลจะเป็นเรื่องธรรมดาเช่น)