我有一个基本控制器,它应该返回一个对象列表(并将它们从 DTO 映射到业务)
如果子控制器决定应用规范(过滤或包含某些内容),它可以通过覆盖该GetSpecification()
方法来实现。
但默认情况下,在基类中我不想过滤对象。
[Route("api/[controller]")]
[ApiController]
public class BaseApiController<TBusinessModel, TApiModel,
TBaseRepository> : BaseController<TBaseRepository>
where TBusinessModel : BaseEntity
where TBaseRepository : IBaseRepository
{
public BaseApiController(TBaseRepository repository,
IMapper mapper) : base(repository, mapper)
{ }
// GET: api/Bars
[HttpGet]
public virtual async Task<IActionResult> List()
{
var spec = GetSpecification();
var items = await _repository.ListAsync<TBusinessModel>(spec);
var apiItems = _mapper.Map<List<TApiModel>>(items);
return Ok(apiItems);
}
protected virtual ISpecification<TBusinessModel> GetSpecification()
{
// how to get an empty specification that does not filter or do something?
return new Specification<TBusinessModel>();
}
}
我使用ardalis 规范,但它可以是任何通用IQueryable
的东西......
实际上它说:
错误 CS0144 无法创建抽象类型或接口“规范”的实例