我正在尝试增加我的反转控制知识,并发现了一些我想知道的代码 - 这是真正的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的更新应该真正发生在创建这个类的类中。
答案 0 :(得分:2)
您提供了将依赖注入课堂的能力。
当您说您的应用程序只使用默认构造函数时,您说您实际上没有注入依赖项。它仍然是硬编码的。
你需要更进一步,并提供一些机制来动态地"在运行时创建依赖项,然后将其注入到类中(通过依赖注入框架或其他一些自定义机制)。