ฉันกำลังพยายามเพิ่มความรู้ Inversion of Control และพบโค้ดบางอย่างที่ฉันอยากรู้ - นี่คือ IoC จริงหรือไม่
public class DepartmentLogic : IDepartmentLogic
{
private readonly IDepartmentRepository _departmentRepository;
public DepartmentLogic(IDepartmentRepository repo)
{
_departmentRepository = repo;
}
public DepartmentLogic()
{
_departmentRepository = new DepartmentRepository(Constants.CONNECTION_STRING_NAME);
}
}
หากการทดสอบหน่วยเรียกคลาสนี้ มันจะผ่านใน IDepartmentRepository ที่จำลอง อย่างไรก็ตาม รหัสแอปพลิเคชันหลักทั้งหมดใช้คลาสที่มีตัวสร้างเริ่มต้น ซึ่งจากนั้นจะแจ้งข่าวไปยัง DepartmentRepository ที่เป็นรูปธรรม
สิ่งนี้ถูกต้องหรือไม่? ฉันคิดว่าฉันอ่านเจอว่าคุณไม่ควรสร้างคลาสที่ขึ้นต่อกันใหม่ภายในคลาสการโทรของคุณ เหมือนที่เกิดขึ้นในตัวสร้างเริ่มต้น และการใหม่ของ DepartmentRepository ที่เป็นรูปธรรมควรเกิดขึ้นในคลาสที่สร้างคลาสนี้จริงๆ