这是 IoC 的正确实现吗?
is this correct implementation of IoC?
我正在尝试增加我的控制反转知识,并发现了一些我想知道的代码 - 这是真正的 IoC 吗?
public class DepartmentLogic : IDepartmentLogic
{
private readonly IDepartmentRepository _departmentRepository;
public DepartmentLogic(IDepartmentRepository repo)
{
_departmentRepository = repo;
}
public DepartmentLogic()
{
_departmentRepository = new DepartmentRepository(Constants.CONNECTION_STRING_NAME);
}
}
如果单元测试调用此 class,它将传入模拟的 IDepartmentRepository。但是,所有主要应用程序代码都使用 class 和默认构造函数,然后更新具体的 DepartmentRepository。
这是正确的吗?我想我读到你不应该在你的调用 class 中更新依赖 classes,就像默认构造函数中发生的那样,具体 DepartmentRepository 的更新应该真正发生在 class 创建了这个 class。
您提供了将依赖项注入 class 的能力。
当您说您的应用程序仅使用默认构造函数时,您是在说您实际上并没有注入依赖项。它仍然是硬编码的。
您需要更进一步,为 "dynamically" 在 运行 时创建依赖关系,然后将其注入 class 提供一些机制(通过依赖注入框架或其他一些自定义机制)。
我正在尝试增加我的控制反转知识,并发现了一些我想知道的代码 - 这是真正的 IoC 吗?
public class DepartmentLogic : IDepartmentLogic
{
private readonly IDepartmentRepository _departmentRepository;
public DepartmentLogic(IDepartmentRepository repo)
{
_departmentRepository = repo;
}
public DepartmentLogic()
{
_departmentRepository = new DepartmentRepository(Constants.CONNECTION_STRING_NAME);
}
}
如果单元测试调用此 class,它将传入模拟的 IDepartmentRepository。但是,所有主要应用程序代码都使用 class 和默认构造函数,然后更新具体的 DepartmentRepository。
这是正确的吗?我想我读到你不应该在你的调用 class 中更新依赖 classes,就像默认构造函数中发生的那样,具体 DepartmentRepository 的更新应该真正发生在 class 创建了这个 class。
您提供了将依赖项注入 class 的能力。
当您说您的应用程序仅使用默认构造函数时,您是在说您实际上并没有注入依赖项。它仍然是硬编码的。
您需要更进一步,为 "dynamically" 在 运行 时创建依赖关系,然后将其注入 class 提供一些机制(通过依赖注入框架或其他一些自定义机制)。