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

抽象クラスにはデフォルトのコンストラクターが必要です。基本クラスのctormeansを呼び出さないコンストラクターがサブクラスにある場合、コンパイラーは自動的に基本クラスのデフォルトのctorを呼び出すため、基本クラスにコンストラクターが必要です。

次のデモは、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();

コンソール出力を観察します

于 2013-01-16T16:08:27.383 に答える