我有一个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);
}
}
现在我希望任何继承此类的类都可以为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)
}
感谢。
答案 0 :(得分:2)
我不完全确定我完全理解你需要什么,但我想我有一个想法 我认为你不应该使用泛型类,而是使用泛型方法:
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);
}
}
希望这有帮助。
答案 1 :(得分:0)
像这样写你的课(在课后加上<T>
)
public class CustomerController<T> : BaseController<T> where T : Customer, IEnumerable<Customer>, int {
}
将通用设置在更高级别