2016-08-14 69 views
0

我打算通過這篇文章,大約依賴注入http://www.asp.net/web-api/overview/advanced/dependency-injection有關依賴性注入的樣品例如需要解釋

這表明微軟統一容器。

但是也有一些不決策意識我

例如一些事情,下面一行

public ProductsController(IProductRepository repository) 

以上是控制器的構造函數。我需要知道誰將repository傳遞給構造函數? ANd是通過在Unity中註冊IProductRepository接口而實現的嗎?

public static void Register(HttpConfiguration config) 
{ 
    var container = new UnityContainer(); 
    container.RegisterType<IProductRepository, ProductRepository>(new HierarchicalLifetimeManager()); 
    config.DependencyResolver = new UnityResolver(container); 

// Other Web API configuration not shown. 
} 

上述代碼是否需要使MVC將對象傳遞給控制器​​的構造函數?

回答

3

你回答了自己的問題:

是通過註冊IProductRepository接口統一成爲可能?

是的。

當您請求使用Unity解析類型時,容器將搜索公共構造函數。如果構造函數需要一些實現(在您的情況下爲IProductRepository),容器將在其註冊中搜索所有必需參數的實現。如果找到,它可以解決這個問題。這是一個遞歸過程。

所以是的。您需要使用容器註冊一個實現IProductRepository,以解析使用該容器的Controller實例。

+0

另外還有一點:OP說*是否需要上述代碼才能使MVC將對象傳遞給控制器​​的構造函數?*它不是MVC,而是傳遞對象而不是統一。 MVC要求統一控制器,因爲默認的DependencyResolver被Unity特定的實現覆蓋。 –