2010-05-17 64 views
1

有幾個使用MEF將整個控制器/視圖包插入到MVC應用程序的例子,但是我沒有找到一個使用MEF插入其他控制器使用的功能部件的例子。將MEF插件導入MVC控制器

例如,認爲NewsService的一個簡單的界面像

interface INewsService 
{ 
    List<NewsItem> GetAllNews(); 
} 

那得到消息的地方,他希望,在NewsItems的列表返回他們。我的頁面應該加載導出的INewsService並在頁面上顯示新聞。

但存在這個問題。我不能在控制器中使用[導入],因爲它們只是在需要時才創建。

編輯:(它們導入到主MVCApplication類不起作用,becouse我不能從控制器訪問) 我想我找到了一種方法通過HttpContext.ApplicationInstance訪問主要的應用程序。但是在這個實例中的Service對象是null,儘管它在Application_Start()方法中被成功創建。任何想法爲什麼?

那麼,如何從控制器中訪問NewsService?

由於提前, 商標

回答

2

你需要創建一個MEF的ControllerFactory,這將使用MEF CompositionContainer中來創建其進口滿足的控制器。然後你可以在你的控制器上放一個INewsService導入。

這是一個sample它顯示了你如何做到這一點。

編輯:這是另一個sample看起來有點簡單。

+0

我不喜歡添加自定義ControllerFactory的方式,但它似乎是目前唯一的良好解決方案。 – Marks 2010-05-17 14:53:51