不能继承没有默认构造函数的基控制器类
本文关键字:控制器 构造函数 默认 继承 不能 | 更新日期: 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.
听起来好像您的IOC容器(如果存在的话)没有覆盖默认的控制器工厂。如果使用Ninject,您应该安装Ninject。MVC3项目。每个容器都需要覆盖默认的控制器工厂,这样它才能构建它们并注入依赖项。
对于StructureMap,您需要StructureMap。MVC3或StructureMap。MVC4
具有这种依赖关系的控制器有异味。这是我最近学的专业术语^_^
首先,我在操作过滤器中有UoW,并使用属性来标记操作事务(在我的例子中,我将其与审计结合起来)。其余的,如果它们真的那么复杂,可能应该有一个应用程序服务来包装它们。
只是一个想法。我是真正的初学者。
这与T4MVC类似,Base控制器没有默认构造函数。
你能改变你的基本控制器抽象?如果是这样,我相信这将使事情顺利进行。
除了David Ebbo Solution,这是
另一个解决方案:
我刚刚给我的基本控制器添加了一个默认构造函数,如:
protected BaseController(){}
现在工作正常(没有CodeRush '基类型构造函数未实现'的问题在子类)