因此,在高層次上,我理解了依賴注入的概念。我們公司希望採用這種做法,我認爲這是一個好主意,但我需要更多信息並提出一些問題。如何做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