0

在我自己尝试创建它之前,我想问一下:是否有任何适用于 ASP.NET WebAPI 的包允许一个 ApiController 对我的所有业务对象执行 CRUD?

现在,我有一个烦人的情况,我必须为每个允许用户 CRUD Books、Apples 和 Lights 的管理页面创建“BookController”、“AppleController”、“LightController”等。

“BookController”、“LightController”等等……太相似了,我不得不继续创造这些东西让我很痛苦。

我有很多业务对象,它们不断出现,每个都需要一个 CRUD。所以这样做:

例子:

class BookController: ApiController 
{
    public HttpResponseMessage Get(int id=-1) { // do the read operation }
    public HttpResponseMessage Post(Book b) { // do the create operation }
    public HttpResponseMessage Put(Book b) { // do the update operation }
    public HttpResponseMessage Delete(Book b) { // do the delete operation }
}

不适合我的情况。我宁愿用这样的东西替换 BookController 和所有其他 CRUD 控制器:

class CRUDController: ApiController 
{
    public HttpResponseMessage Get(int id=-1) { // do the read operation }
    public HttpResponseMessage Post(object obj) { // do the create operation }
    public HttpResponseMessage Put(object obj) { // do the update operation }
    public HttpResponseMessage Delete(object obj) { // do the delete operation }
}

有什么建议或提示吗?

4

1 回答 1

0

编写一个通用的基本控制器。

class CRUDController<T> : ApiController
{
    public virtual HttpResponseMessage Get(int id=-1) { // do the read operation }
    public virtual HttpResponseMessage Post(T obj) { // do the create operation }
    public virtual HttpResponseMessage Put(T obj) { // do the update operation }
    public virtual HttpResponseMessage Delete(T obj) { // do the delete operation }
}

然后从它继承你的控制器。

class BookController : CRUDController<Book>
{
    ...
}

需要注意的一件事是,如果您在控制器中使用该模式,则需要注入存储库。否则,基本控制器内的代码将变成意大利面条。

于 2013-11-10T18:09:12.107 回答