【发布时间】:2014-02-18 08:09:45
【问题描述】:
我是 asp.net mvc 的初学者。我有一个问题,我相信有人在 stackoverflow 上帮助我)我不明白在 ASP.NET MVC 中使用 IoC 和 DI 的原因。你能帮助我吗。也许我很愚蠢,但我真的很想知道)有人可以解释清楚吗?我会很感激。
【问题讨论】:
标签: c# asp.net-mvc-4
我是 asp.net mvc 的初学者。我有一个问题,我相信有人在 stackoverflow 上帮助我)我不明白在 ASP.NET MVC 中使用 IoC 和 DI 的原因。你能帮助我吗。也许我很愚蠢,但我真的很想知道)有人可以解释清楚吗?我会很感激。
【问题讨论】:
标签: c# asp.net-mvc-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 容器进行配置驱动。
从可测试性和可维护性的角度来看,区别在于夜以继日。
【讨论】: