2

fluentvalidationlightinjectを使用しています

ブログ記事を挿入するコードは次のとおりです。

public OperationResultDto Add(BlogArticleDto blogArticleDto) { OperationResultDto result = new OperationResultDto();

    ValidationResult validationResult = 
        _blogArticleModelValidator.Validate(blogArticleDto);

    if (!validationResult.IsValid)
    {
        result.IsOk = false;

        ValidationFailure firstValidationFailer = 
            validationResult.Errors.FirstOrDefault();

        if (firstValidationFailer != null)
        {
            result.Message = firstValidationFailer.ErrorMessage;
        }

        return result;
    }

    BlogArticle blogArticle = new BlogArticle {
        Title = blogArticleDto.Title,
        ShortBody = blogArticleDto.ShortBody,
        Body = blogArticleDto.Body,
        IsOnline = blogArticleDto.IsOnline,
        CategoryName = blogArticleDto.CategoryName,
        PublishedBy = blogArticleDto.PublishedBy,
        PublishDate = blogArticleDto.PublishDate,
        Tags = new List<string>(), //TODO parse, model's tags in one string.
        CreateDate = DateTime.Now,
        MainPhotoPath = blogArticleDto.MainPhotoPath,
    };

    _blogArticleRepository.Add(blogArticle);

    return result;
}

ご覧のとおり、「検証セクション」は巨大で、サービス (ビジネス) レイヤーで dto パラメーターを検証したくありません。ioc (lightinject) で「引数」を検証したい。

それを進めるための私のiocコードは次のとおりです。

public class ServiceInterceptor : IInterceptor
{
    public object Invoke(IInvocationInfo invocationInfo)
    {
        Log.Instance.Debug("Class: ServiceInterceptor -> Method: Invoke started.");

        string reflectedTypeFullname = String.Empty;
        string methodName = String.Empty;

        if (invocationInfo.Arguments.Any())
        {
            //TODO Validate method parameters here..

            foreach (object argument in invocationInfo.Arguments)
            {
            }
        }

        if (invocationInfo.Method.ReflectedType != null)
        {
            reflectedTypeFullname = invocationInfo.Method.ReflectedType.FullName;
            methodName = invocationInfo.Method.Name;
        }

        ... ...

これで、メソッドのすべての引数を取得して、fluentvalidator に渡すことができます。ここで typeOf 引数を定義する必要があることはわかっていますが、その後、流暢な検証の関連する検証オブジェクト*を呼び出して引数を検証するにはどうすればよいですか?

4

1 に答える 1