【问题标题】:FluentValidation Validator using argumentsFluentValidation 验证器使用参数
【发布时间】:2010-07-23 11:30:35
【问题描述】:

我有一个 FluentValidation 验证器,我想用它来验证预订。在预订时,您必须选择在您选择的旅行中作为可用房型存在的房型。我需要从服务中获取可用的房间类型,并传入游览代码。在需要的地方获取旅游代码的最佳方式是什么?

到目前为止我得到了什么:

public class BookingValidator : AbstractValidator<Booking>, IBookingValidator

public BookingValidator()
{
    RuleFor(booking => booking.Rooms).SetValidator(new RoomValidator())
}

public class RoomValidator : AbstractValidator<Room>

public RoomValidator()
{
    //validate that room.Type (eg. TWIN) exists in availableRoomTypes (eg List<string> {'SINGLE','TWIN'}
}

解决问题的一些技巧:

public class BookingValidator : AbstractValidator<Booking>

//should/can i pass in arguments here when IoC container is wiring up IBookingValidator to BookingValidator? Seems awkward
public BookingValidator(string tourCode)
{

//if so, use argument to get available room types, pass to RoomValidator
var availableRooms = RoomTypeService.GetAvailableRoomTypesForTour(tourCode);

RuleFor(booking => booking.Rooms).SetValidator(new RoomValidator(availableRooms))

//alternatively, tourCode is available from booking - is there some way to pass it to RoomValidator?
RuleFor(booking => booking.Rooms).SetValidator(new RoomValidator(),booking => booking.TourCode);

//Or is there some way I should be using .Must() or Custom()??

}

所以主要问题是如何或在哪里将游览代码放入验证器中......?

【问题讨论】:

    标签: c# fluentvalidation


    【解决方案1】:

    我建议创建一个依赖于 IRoomTypeService 和 IBookingValidator 的服务。它从 IRoomTypeService 依赖项中获取可用的房间类型,并通过属性将它们传递给验证器。示例见以下代码:

    public class BookingValidationService : IBookingValidationService
    {
        public IRoomTypeService RoomTypeService { get; set; }
    
        public IBookingValidator BookingValidator { get; set; }
    
        public ValidationResult ValidateBooking(Booking booking, string tourCode)
        {
            BookingValidator.AvailableRooms = RoomTypeService.GetAvailableRoomTypesForTour(tourCode);
    
            return BookingValidator.Validate(booking);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多