因此,在高层次上,我理解了依赖注入的概念。我们公司希望采用这种做法,我认为这是一个好主意,但我需要更多信息并提出一些问题。如何做ASP.NET依赖注入
什么是良好或最流行的依赖注入容器?我听说过ninject,这对.NET 4 Webforms有效吗?微软是否拥有可能更好的专有DI容器?
我们的应用程序的结构是这样的:
- 解决方案
- UI项目(ASP.NET Web应用程序)
- 业务层(类库)
- 数据访问层(类库)
- 数据访问层包含用于访问数据的存储库类。这些存储库位于业务层交互的接口下。
- 业务层具有包含通用功能的“控制器”类(不要与MVC控制器混淆)。
- 解决方案
这里是我们的业务层的示例控制器:
public class OrderController
{
IOrderRepository _orderRepository;
public OrderController(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
}
public List<string> GetFilters()
{
// Return list of filters.
}
public List<Order> GetFilteredOrders(string filter)
{
switch (filter)
{
case "Newest":
return // Get orders sorted by newest first.
case "Oldest":
return // Get orders sorted by oldest first.
default:
return // etc etc etc
}
}
}
正如你可以看到这需要的IOrderRepository
注入的情况下,方便单位可测试性。 OrderController
目前在需要使用它的相应页面后面的代码中实例化。我们不想在中创建一个新的IOrderRepository
,每个我们实例化的地方OrderController
,这是我们想要使用DI的地方。
实现此目的的最佳方法是什么? DI Container在什么时候接管并注入IOrderRepository
的实例?会不会有某种工厂,所以我可以做OrderController _orderController = OrderControllerFactory.Create()
或类似的东西?我有点迷路。
让我知道我是否需要澄清一些事情。谢谢。
参见这篇文章:http://bit.ly/gbEjv0。它适用于每个DI容器。 – Steven 2011-04-07 20:34:20
我只有exp与Ninject。控制器结构的方式,ninject会因为构造函数注入而很好地适应。 – 2011-04-07 20:35:00
感谢您的文章。现在阅读。 – Chev 2011-04-07 20:55:19