2

Fluent 検証は初めてで、助けが必要です。別のインターフェイス プロパティを持つインターフェイスがあり、両方のインターフェイスの検証を記述しました。課題は、インターフェイス プロパティの検証メッセージが表示されないことです。

以下は私の状況の私のコードです

public interface IAddress
{
    string City { get; set; }
    string Town { get; set; }
}

public interface IAccount
{
    string FullName { get; set; }
    int Age { get; set; }
    IAddress Address { get; set; }
}

    public AccountValidator ()
    {
        RuleFor(x => x.FullName).NotEmpty().WithMessage("Full Name  can not  be  empty");
        RuleFor(x => x.Age).GreaterThan(18).WithMessage("Age cannot  be  less  than 18 years");
        RuleFor(x => x.Address).SetValidator( new AddressValidator()); 
    }

    public AddressValidator()
    {
        RuleFor(x => x.City).NotEmpty().NotNull().WithMessage("City can not  be empty");
        RuleFor(x => x.Town).NotEmpty().NotNull().WithMessage("Town can not  be empty"); 
    }

検証を呼び出すために使用しているクライアントコードは次のとおりです。

        var accountValidator = new AccountValidator();

         accountValidator.ValidateAndThrow(_account );

前もって感謝します。

4

1 に答える 1

0

さて、私はミニコンソールアプリを試してみましたが、例外はうまくキャッチされました(年齢+都市)(それぞれに特定の「WithMessage」を配置する必要があるため、NotEmpty()。NotNull()をMust(...)に変更しましたまたはそれら)。

それで私はあなたの問題を誤解しましたか?

public interface IAddress
    {
        string City { get; set; }
        string Town { get; set; }
    }

    public interface IAccount
    {
        string FullName { get; set; }
        int Age { get; set; }
        IAddress Address { get; set; }
    }

    public class Address : IAddress
    {
        public string City { get; set; }
        public string Town { get; set; }
    }
    public class Account : IAccount
    {
        public string FullName { get; set; }
        public int Age { get; set; }
        public IAddress Address { get; set; }
    }

    public class AccountValidator : AbstractValidator<IAccount>
    {
        public AccountValidator()
        {
            RuleFor(x => x.FullName).NotEmpty().WithMessage("Full Name  can not  be  empty");
            RuleFor(x => x.Age).GreaterThan(18).WithMessage("Age cannot  be  less  than 18 years");
            RuleFor(x => x.Address).SetValidator(new AddressValidator());
        }
    }

    public class AddressValidator : AbstractValidator<IAddress>
    {
        public AddressValidator()
        {
            RuleFor(x => x.City).Must(x => !string.IsNullOrEmpty(x)).WithMessage("City can not  be empty");
            RuleFor(x => x.Town).Must(x => !string.IsNullOrEmpty(x)).WithMessage("Town can not  be empty");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            var account = new Account
                               {
                                   Address = new Address
                                                 {
                                                     City = "",
                                                     Town = "Town"
                                                 },
                                   Age = 18,
                                   FullName = "FullName"
                               };
            var accountValidator = new AccountValidator();
            try
            {
                accountValidator.ValidateAndThrow(account);
            }
            catch (ValidationException e)
            {
                Console.WriteLine(e);
            }
            Console.ReadKey();

        }
    }
于 2012-04-05T09:20:23.900 に答える