IoC和DI的功能

时间:2014-02-18 08:09:45

标签: c# asp.net-mvc-4

我是asp.net mvc的初学者。我有一个问题,我相信任何人都可以帮助我完成stackoverflow)我无法理解在ASP.NET MVC中使用IoC和DI的原因。你能帮助我吗。也许我是傻瓜,但我真的想知道它吗?Ccan有人解释清楚?我会很感激。

1 个答案:

答案 0 :(得分:4)

对于ASP.NET MVC,控制器有很多依赖关系,DI和IoC容器可以通过接口解耦,使它们可以模拟单元测试,也可以更容易地随时间更改,而不会影响控制器。

例如,如果控制器依赖于日志记录提供程序,自定义配置提供程序和一两个域服务(它们本身依赖于数据管理器和可能的其他依赖项),那么如何对控制器进行单元测试 - 具有如此多的外部控制器依赖

实现此目的的方法是使其依赖性可注入(即DI)和注入的依赖项使用配置问题(即IoC容器)。

考虑以下构造函数......

public MyController()
{
    _logger = new Logger();
    _configProvider = new ConfigProvider();
    _customerService = new CustomerService();
    _orderService = new OrderService();
}

...与...

public MyController(ILogger logger, IConfigProvider configProvider, ICustomerService customerService, IOrderService orderService)
{
    _logger = logger;
    _configProvider = configProvider;
    _customerService = customerService;
    _orderService = orderService;
}

...,允许注入依赖项(例如单元测试中的模拟),可以使用IoC容器进行配置驱动。

从可测试性和可维护性的角度来看,差异是日夜的。