2013-03-09 90 views
1

我有一個繼承了另一個控制器一BaseController,不能繼承基控制器類沒有默認的構造函數

BaseController:

public partial class BaseController : Controller 
{ 
     private readonly IUnitOfWork _uow; 
     private readonly INewsService _newsService; 

     protected BaseController(IUnitOfWork uow, INewsService newsService) 
     { 
      _uow = uow; 
      _newsService = newsService; 
     } 

//... 

} 

控制器之一:

public partial class HomeController : BaseController 
{ 

    private readonly IUserService _userService; 
    private readonly IMemberService _memberService; 
    private readonly IUnitOfWork _uow; 
    public HomeController(IUnitOfWork uow, IUserService userService, IMemberService memberService, INewsService newsService): base(uow, newsService) 
    { 
     _userService = userService; 
     _memberService = memberService; 
     _uow = uow; 
    } 

//... 
} 

但我在t4mvc生成的類中爲每個控制器獲取此錯誤,例如,此錯誤:

'MvcApp.Controllers.BaseController' does not contain a constructor that takes 0 arguments. 

in HomeController.generated.cs file。

SOLUTION

https://stackoverflow.com/a/15320890/1719207

回答

1

加成大衛博解決方案,這是

另一種解決方案:

我剛添加到我的基地控制器默認的構造函數,如:

protected BaseController(){} 

現在工作正常(沒有CodeRush'基類型構造函數沒有實現'在子類中的問題)。

1

聽起來像是你的IOC容器(如果存在)不覆蓋默認控制器工廠。如果使用Ninject,則應安裝Ninject.MVC3項目。每個容器需要覆蓋默認的控制器工廠,以便它可以構建它們並注入依賴關係。

對於StructureMap,你需要StructureMap.MVC3StructureMap.MVC4

+0

我使用StructureMap,我重寫了默認的控制器工廠。 我在編譯時遇到這個錯誤,而不是在運行時。 – user197508 2013-03-09 17:49:32

+0

我敢打賭,你也可以在運行時獲得它:) – Jon 2013-03-09 17:52:46

+0

你安裝了SM MVC包嗎? http://nuget.org/packages/StructureMap.MVC3/ – Jon 2013-03-09 17:53:41

1

控制器與這種依賴的氣味。這是我最近學到的技術術語^ _^

其中之一,我在動作過濾器中使用UoW,並使用屬性來標記動作事務(在我的情況下,我將它與審計相結合)。其餘的人,如果他們真的很複雜,可能應該有一個應用服務來包裝它們。

只是一個想法。我是一個真正的初學者。

1

這與T4MVC Base controller doesn't have default constructor類似。

你可以改變你的基礎控制器是抽象的嗎?如果是這樣,我相信會使事情發揮作用。

+0

嗨大衛艾博,+1投票,我測試了你的解決方案併爲我工作,但CodeRush在子類中遇到'基類型構造函數未實現'的問題。請參閱我的解決方案。 – user197508 2013-03-10 10:41:58

+0

David Ebbo,同樣在你的解決方案中有一些額外的'ActionResult結果'參數的方法的重載在基本控制器中不可訪問! – user197508 2013-03-10 10:48:19

相關問題