我有一个由另一个控制器继承的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
档案中。
解
答案 0 :(得分:1)
听起来像你的IOC容器(如果存在)没有覆盖默认的控制器工厂。如果使用Ninject,则应安装Ninject.MVC3项目。每个容器都需要覆盖默认的控制器工厂,以便它可以构建它们并注入依赖项。
对于StructureMap,您需要StructureMap.MVC3或StructureMap.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类型构造函数未实现'在子类中出现问题)。