这是 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 提供一些机制(通过依赖注入框架或其他一些自定义机制)。