IPageable というインターフェイスを実装する ServiceStack リクエスト DTO がいくつかあります。このインターフェイスにある 2 つのプロパティを検証できるバリデーターがあります。リクエストの種類ごとに 1 つのバリデーターを持つことになると思いますが、それらすべてでその IPageable 関連の検証ロジックを複製する必要がないようにしています。
public class PageableValidator : AbstractValidator<IPageable>
{
public PageableValidator()
{
RuleFor(req => req.Page)
.GreaterThanOrEqualTo(1);
RuleFor(req => req.PageSize)
.GreaterThanOrEqualTo(1)
.When(req => req.Page > 1);
}
}
これについて私が持っていたいくつかのアイデアは次のとおりです。
IPageable を実装するすべてのリクエスト タイプに container.RegisterValidators() を適用させることはできないようですが、それが私の最初の考えでした。
すべてのリクエスト定義に複数の
<Validator>
属性を指定して、リクエスト固有のバリデータと IPageable バリデータの両方を実行できますか?バリデータの登録時に、IPageable を実装するすべての型に対して IPageable バリデータを実行するように指定できますか?
PageableValidator からルールを取得し、それらをインクルード/実行するリクエスト固有のバリデーターの基本クラスを作成できますか?
をサブクラス化することで、ある種の作業AbstractValidator<T> where T : IPageable
を行うことができますが、アスペクト指向の方法で複数のインターフェイスで検証を実行できるようにしたいと考えています。