T4MVC不传递参数到基本控制器,因此生成的代码不构建

本文关键字:此生 代码 构建 参数 T4MVC 控制器 | 更新日期: 2023-09-27 17:53:33

问题:

当我编译时,我得到以下错误:

" .Controllers。ControllerBase'不包含构造函数接受0个参数"

我的基本控制器是这样的:

public abstract class ControllerBase : Controller
{
    public CompanyChannel<IAuthorizationService> authorizationServiceClient;
         public ControllerBase(CompanyChannel<IAuthorizationService> authService)
    {
        this.authorizationServiceClient = authService;
    }
}

一个使用Base..的控制器示例

public partial class SearchController : ControllerBase
{
    protected CompanyChannel<IComplaintTaskService> complaintTaskServiceChannel;
    protected IComplaintTaskService taskServiceClient;      
    protected ComplaintSearchViewModel searchViewModel;
    #region " Constructor "
    public SearchController(CompanyChannel<IComplaintTaskService> taskService, CompanyChannel<IAuthorizationService> authService, ComplaintSearchViewModel viewModel)
        : base(authService)
    {
        searchViewModel = viewModel;
        this.complaintTaskServiceChannel = taskService;
        this.taskServiceClient = complaintTaskServiceChannel.Channel;
    }
    #endregion
    public virtual ActionResult Index()
    {
        return View();
    }
}

这似乎是绊倒T4MVC。

我应该不把参数传递给基构造函数吗?

T4MVC不传递参数到基本控制器,因此生成的代码不构建

抽象类必须有一个默认构造函数。当你在子类中有任何没有调用基类的构造函数时,编译器会自动调用基类的默认构造函数,因此你必须在基类中有一个。

下面的演示将有助于理解c#

中的元素链
class Base
{
    public Base()
    {
        Console.WriteLine("Base() called");
    }
    public Base(int x)
    {
        Console.WriteLine("Base(int x) called");
    }
}
class Sub : Base
{
    public Sub()
    {
        Console.WriteLine("Sub() called");     
    }
}

并在Main()中创建

new Sub();

并观察控制台输出