5

问题:

构建时出现以下错误:

“'.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 跳闸。

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

4

1 回答 1

3

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

以下演示将有助于理解 C# 中的 ctor 链接

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();

并观察控制台输出

于 2013-01-16T16:08:27.383 回答