gpt4 book ai didi

c# - T4MVC 未将参数传递给基本 Controller ,因此生成的代码无法构建

转载 作者:太空狗 更新时间:2023-10-29 23:32:46 25 4
gpt4 key购买 nike

问题:

构建时出现以下错误:

"'.Controllers.ControllerBase' does not contain a constructor that takes 0 arguments"

我的基本 Controller 如下所示:

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

使用 Base 的示例 Controller ..

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 的绊脚石。

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

最佳答案

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

以下演示将有助于理解 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();

并观察控制台输出

关于c# - T4MVC 未将参数传递给基本 Controller ,因此生成的代码无法构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14362353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com