这是IoC的正确实现吗?

时间:2016-09-14 23:17:04

标签: c# .net 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的更新应该真正发生在创建这个类的类中。

1 个答案:

答案 0 :(得分:2)

您提供了将依赖注入课堂的能力。

当您说您的应用程序只使用默认构造函数时,您说您实际上没有注入依赖项。它仍然是硬编码的。

你需要更进一步,并提供一些机制来动态地"在运行时创建依赖项,然后将其注入到类中(通过依赖注入框架或其他一些自定义机制)。