2011-09-02 53 views
3

我已經打開了一個問題on CodePlex但都沒有收到任何答覆。MEFContrib.MVC3:導出控制器與基類

基本上,我有一個基礎控制器,所有的控制器都繼承自我的控制器。當我創建一個新的MVC3項目時,將我的控制器放在另一個程序集中,並將MEFContrib.MVC3添加到項目中,一切都很好。當我讓任何控制器從我的基類繼承,他們不能再被發現。

我對MEFContrib不太瞭解,不知道究竟是什麼突破,但我試圖用ExportAttribute來裝飾我的控制器,那也沒有奏效。

所有這一切都是不同的裝配比主MVC項目:

public class MyBaseController : Controller 
{ 
    ... 
} 

// This controller cannot be found. 
public class HomeController : MyBaseController 
{ 
    public ActionResult Index() 
    { 
     // Do Stuff 
     return View(); 
    } 
} 

// This controller can be found. 
public class HomeController : Controller 
{ 
    // yada, yada, yada... 
} 

編輯:

counsellorben是完全正確的。我有依賴沒有正確標記出口,所以控制器不能正確組成。我逐步瀏覽了我的每個依賴關係,逐步瞭解他們自己的依賴關係,發現了我錯過的幾個。

+0

請指定導入到MyController類中的任何依賴項。最可能的問題是MyController類中存在依賴關係問題,並且這會導致與從MyController繼承的任何控制器相同的問題。 – counsellorben

+0

@counsellorben - 去看看,看看它是什麼。 –

+0

@counsellorben - 我能夠創建一個基類和依賴關係的示例項目,它工作得很好。如果你創建一個答案,我會接受它,因爲這似乎是我的問題。試圖將Ninject的應用程序移植到MEFContrib的IoC。似乎要找出依賴關係會有點麻煩。順便說一下,有沒有辦法查看哪些依賴關係導致MEF無法構建適當的部分? –

回答

1

最有可能的問題是,有一個在你的MyController類的依賴問題。這將導致任何控制器從MyController繼承問題。

請參閱this answer你可以用它來嘗試和診斷您的問題在於一些示例代碼。

+0

非常感謝。 –

0

我認爲你需要用InheritedExport屬性來裝飾。

+0

謝謝,Nate。實際上是因爲我錯過了一個依賴 - 只是一個愚蠢的錯誤。 –