Wie kann ich mithilfe von FluentValidation eine Eindeutigkeitsbeschränkung für eine Reihe von Eigenschaften hinzufügen?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie kann ich mithilfe von FluentValidation eine Eindeutigkeitsbeschränkung für eine Reihe von Eigenschaften hinzufügen?

Post by Guest »

Ich muss in der Lage sein, mehrere Eigenschaften gleichzeitig zu validieren und sicherzustellen, dass sie einen eindeutigen Namen haben. Mein Anfrageobjekt sieht zum Beispiel so aus:

Code: Select all

public IReadOnlyCollection IntegerParameters { get; init; }
public IReadOnlyCollection StringParameters { get; init; }
public IReadOnlyCollection BooleanParameters { get; init; }
Jeder dieser Parameter enthält einen Eigenschaftsnamen. Ich muss überprüfen, ob die Eigenschaft Name in allen drei Anforderungsobjektsammlungen eindeutig ist. Ich muss auch die Duplikate in der Nachricht in der Fehlermeldung zurückgeben.
Was ich bisher habe
Ich habe ein Generikum geschrieben Validator:

Code: Select all

internal class ListUniqueValidator : PropertyValidator
{
public override string Name => "ListUniqueValidator";

public override bool IsValid(ValidationContext context, IList list)
{
var duplicates = list
.GroupBy(x => x)
.Where(group => group.Count() == 1)
.Select(group => group.Key.ToString())
.ToList();

context.MessageFormatter.AppendArgument("Duplicates", string.Join(", ", duplicates));
return duplicates.Count > 0;
}

/// 
protected override string GetDefaultMessageTemplate(string errorCode)
=> "{PropertyName} must contain all unique elements. Duplicates: {Duplicates}";
}
Dann wird es etwas knifflig zu handhaben:

Code: Select all

RuleFor(x => x)
// Concat IntegerParameters, StringParameters, BooleanParameters?
// Get Name property?
// What goes here?
.SetValidator(new ListUniqueValidator());

Was ich vermeiden möchte, ist, dies aus seiner eigenen Validatorklasse herauszunehmen und diesen ganzen Teil in eine .Must-Datei zu packen. Dies liegt daran, dass dieser Eindeutigkeitsvalidator auch an anderer Stelle wiederverwendet werden muss. Ich möchte auch den ListUniqueValidator wenn möglich generisch halten.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post