オブジェクトのリストを返す(そしてそれらを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 抽象型またはインターフェイス '仕様' のインスタンスを作成できません