[英]Generic controller class with inheritance .NET
I am making a custom controller class, from which all my other controller classes will inherit in.Net Framework 4.8, Web API
public class BaseApiController<T> where T: class, ApiController
{
protected T service;
public BaseApiController(T service)
{
this.service = service;
}
}
这给出了编译时错误
错误 CS0450“ApiController”:不能同时指定约束 class 和“类”或“结构”约束
我知道我缺少正确语法的小细节。
T
是一项服务,对于每个 controller 都是单独的,我想确保它始终是一个引用类型。 我还想从主ApiController
class 继承。
如果我这样做,就没有错误(这对我有用):
public class BaseApiController<T> : ApiController
{
protected T service;
public BaseApiController(T service)
{
this.service = service;
}
}
但我想要引用类型的附加T
逻辑。
我想这样使用它,例如:
注意:这是我使用它的方式并且它有效。
[Authorize]
[RoutePrefix("api/[controller]")]
public class MyOtherController : BaseApiController<IMyOtherService>
{
public MyOtherController(IMyOtherService myOtherService) : base(myOtherService)
{
}
[HttpPost]
public IHttpActionResult DoSomething(Model requestModel)
{
var result = this.service.SetPaymentStatusUK(model: requestModel);
return Ok();
}
}
我只想知道如何在BaseApiController
class 中添加T
检查引用类型。
如果我正确理解您的问题,那么问题是您将ApiControler
作为约束应用到 T。当您想将其应用为BaseApiController<T>
的祖先时。
作为约束ApiControler
它无效,因为您已经应用了class
约束。 class
包括所有类,包括 ApiControler 和所有其他尚未编写的 class。 这是 ApiControler 限制较少的约束。 您只使用特定类型或接口作为约束,如果您希望所有可能的 T 绝对肯定具有该继承/接口实现。
根据语法示例,您首先继承,然后是约束。 所以:
public class BaseApiController<T> : ApiController where T: class
{
//all the code
}
可能是您正在寻找的机器人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.