无法继承没有默认构造函数的Base Controller类

时间:2013-03-09 17:22:04

标签: c# asp.net-mvc constructor controller t4mvc

我有一个由另一个控制器继承的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.

HomeController.generated.cs档案中。

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

4 个答案:

答案 0 :(得分:1)

听起来像你的IOC容器(如果存在)没有覆盖默认的控制器工厂。如果使用Ninject,则应安装Ninject.MVC3项目。每个容器都需要覆盖默认的控制器工厂,以便它可以构建它们并注入依赖项。

对于StructureMap,您需要StructureMap.MVC3StructureMap.MVC4

答案 1 :(得分:1)

具有这种依赖性的控制器闻起来。这是我最近学到的技术术语^ _ ^

首先,我在动作过滤器中使用UoW并使用属性来标记动作事务(在我的情况下,我将它与审计相结合)。其余的,如果真的那么复杂,可能应该有一个应用程序服务来包装它们。

只是一个想法。我是一个真正的初学者。

答案 2 :(得分:1)

这类似于T4MVC Base controller doesn't have default constructor

您可以将基本控制器更改为抽象吗?如果是这样,我相信这会使事情奏效。

答案 3 :(得分:1)

除了David Ebbo Solution,这是

另一种解决方案:

我刚刚在我的Base Controller中添加了一个默认构造函数,例如:

protected BaseController(){}

现在工作正常(没有CodeRush' Base类型构造函数未实现'在子类中出现问题)。