我有一个BaseController
public abstract class BaseController<T> : ApiController
{
protected APIResponseTO<T> _reponse;
protected IHttpActionResult CreateResponse(HttpStatusCode httpStatus, T data)
{
_reponse = new APIResponseTO<T>()
{
HttpStatus = httpStatus,
Data = data
};
return Ok(_reponse);
}
}
现在,我希望继承该类的任何Class都可以为T定义多种类型,例如
public class CustomerController : BaseController<T>
{
public IHttpActionResult Get()
{
var customers = _customerService.GetCustomers();
//call Parent Class CreateResponse() to create IHttpActionResult object
//here customers is IEnumerable<Customer>
return CreateResponse(HttpStatusCode.Created, customers)
}
public IHttpActionResult Post([FromBody]Customer customer)
{
var custId= _customerService.AddCustomers();
//call Parent Class CreateResponse() to create IHttpActionResult object
//here customer is integer(Single Object)
return CreateResponse(HttpStatusCode.Created, custId)
}
}
我的要求是我可以在课堂上定义某种方式
public class CustomerController : BaseController<T> where T : Customer, IEnumerable<Customer>, int
{
}
或方法级别
public IHttpActionResult Post<T>([FromBody]Customer customer)
where T : int
{
var custId= _customerService.AddCustomers();
//call Parent Class CreateResponse() to create IHttpActionResult object
//here customer is integer(Single Object)
return CreateResponse(HttpStatusCode.Created, custId)
}
谢谢。
我不确定我是否完全了解您的需求,但我想我有个主意。
我认为您不应使用通用类,而应使用通用方法:
public class CustomerController : BaseController
{
public IHttpActionResult Get()
{
var customers = new List<object>();
return CreateResponse<List<object>>(HttpStatusCode.Created, customers);
}
public IHttpActionResult Post([FromBody]Customer customer)
{
int custId = 17;
return CreateResponse<int>(HttpStatusCode.Created, custId);
}
}
public abstract class BaseController : ApiController
{
protected IHttpActionResult CreateResponse<TData>(HttpStatusCode httpStatus, TData data)
{
// Problem here is that BaseController is not a generic class anymore, so you can't store your responses but then again, why would you want to store them in a variable?
var reponse = new APIResponseTO<TData>()
{
HttpStatus = httpStatus,
Data = data
};
return Ok(reponse);
}
}
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句