C# Web API:通用控制器

问题描述 投票:0回答:0

是否可以使用组合而不是继承来设计基本控制器结构?

基本上,我应用程序中的每个模型都有自己定义的服务,其中定义了每个模型的所有操作:

public interface IPersonService : 
    IReadRepository<PersonFilterRequest, PersonReadResponse, Person>,
    IInsertRepository<PersonInsertRequest, PersonInsertResponse, Person>,
    IUpdateRepository<PersonUpdateRequest, PersonUpdateResponse, Person>,
    IDeleteRepository<PersonDeleteRequest, PersonDeleteResponse, Person>
{    
    // ...
}

public class PersonService : IPersonService
{
    public IReadAction<PersonFilterRequest, PersonReadResponse, Person> Reader { get; private set; }
    public IInsertAction<PersonInsertRequest, PersonInsertResponse, Person> Inserter { get; private set; }
    public IUpdateAction<PersonUpdateRequest, PersonUpdateResponse, Person> Updater { get; private set; }
    public IDeleteAction<PersonDeleteRequest, PersonDeleteResponse, Person> Deleter { get; private set; }
}

我想做的是为每个动作创建基本控制器类(即

ReadController
InsertController
UpdateController
DeleteController
),然后使用选定的控制器(取决于每个数据库模型上允许的动作)有点像:

[ApiController]
public class PersonController
{
    public ReadController<PersonFilterRequest, PersonReadResponse, Person, PersonService> Read { get; private set; }
    public InsertController<PersonInsertRequest, PersonInsertResponse, Person, PersonService> Insert { get; private set; }
    public UpdateController<PersonUpdateRequest, PersonUpdateResponse, Person, PersonService> Update { get; private set; }
    public DeleteController<PersonDeleteRequest, PersonDeleteResponse, Person, PersonService> Delete { get; private set; }
}

然后,当用户触发一个动作时,将调用适当的控制器(及其方法)(即,如果触发插入,则应调用

PersonController.Insert
属性中的适当方法)

这样的事情可能吗?

c# generics asp.net-web-api controller
© www.soinside.com 2019 - 2024. All rights reserved.