考虑到,TableController是存在于nuget包库(Microsoft.Azure.Mobile.Server.Tables)中的类之一。为了创建自己的Controller,我们需要继承该类并编写诸如GetAll,GetSingle等的方法,
public class OrderController : TableController<Order>
{
public IQueryable<Order> GetAll()
{
return Query();
}
public SingleResult<Order> GetSingle(string id)
{
return Lookup(id);
}
public Task Delete(string id)
{
return DeleteAsync(id);
}
//More methods here
}
我需要编写其他控制器,其中Get,Update,Delete的方法通用。我考虑过使用通用基类,它可能如下所示:想法是将通用代码重用到基类中
public class OrderController : BaseController<User>
{
}
public class BaseController<T> : TableController<T> where T: class
{
//All common methods like GetAll, GetSingle can be here with Type T
public IQueryable<T> GetAll()
{
return Query();
}
public SingleResult<T> GetSingle(string id)
{
return Lookup(id);
}
public Task Delete(string id)
{
return DeleteAsync(id);
}
//More methods here
}
但是它会产生预期的编译错误。在这种情况下是否有实现通用基类的方法?
答案 0 :(得分:2)
这应该很简单:
LineStringField
您将实现为:
public abstract class BaseController<T> : TableController<T>
{
protected override void Initialize(HttpControllerContext controllerContext)
{
base.Initialize(controllerContext);
//Some code here...
}
// GET T/TodoItem
public IQueryable<T> GetAllTodoItems()
{
// your code here. T will be the right type but it'll be near on useless
}
//More methods here
}
请注意,如果public class OrderController : BaseController<Order>
{
}
约束TableController
,则必须对T
施加适当的约束
编辑:我认为这对您没有用。但是代码会编译。