不能继承没有默认构造函数的基控制器类

本文关键字:控制器 构造函数 默认 继承 不能 | 更新日期: 2023-09-27 18:03:11

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

<<p> 解决方案/strong> https://stackoverflow.com/a/15320890/1719207

不能继承没有默认构造函数的基控制器类

听起来好像您的IOC容器(如果存在的话)没有覆盖默认的控制器工厂。如果使用Ninject,您应该安装Ninject。MVC3项目。每个容器都需要覆盖默认的控制器工厂,这样它才能构建它们并注入依赖项。

对于StructureMap,您需要StructureMap。MVC3或StructureMap。MVC4

具有这种依赖关系的控制器有异味。这是我最近学的专业术语^_^

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

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

这与T4MVC类似,Base控制器没有默认构造函数。

你能改变你的基本控制器抽象?如果是这样,我相信这将使事情顺利进行。

除了David Ebbo Solution,这是

另一个解决方案:

我刚刚给我的基本控制器添加了一个默认构造函数,如:

protected BaseController(){}

现在工作正常(没有CodeRush '基类型构造函数未实现'的问题在子类)