J'ai un validateur FluentValidation que je veux utiliser pour valider une réservation. Lors d'une réservation, vous devez choisir un type de chambre qui existe en tant que type de chambre disponible sur le circuit que vous choisissez. J'ai besoin d'obtenir les types de chambres disponibles à partir d'un service, en passant le code pour la visite. Quelle est la meilleure façon de gérer le code du tour où il doit être?FluentValidation Validator utilisant les arguments
Ce que j'ai jusqu'à présent:
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'}
}
Certains pirater le problème:
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()??
}
Le problème principal est de savoir comment ou où pour obtenir le code de la visite dans le validateur ... ?