Qual è un buon modo per convalidare un modello quando sono richieste informazioni esterne al modello per consentire la convalida? Ad esempio, si consideri il seguente modello:ASP.NET MVC 3: convalida del modello quando sono richieste informazioni esterne al modello
public class Rating {
public string Comment { get; set; }
public int RatingLevel { get; set; }
}
L'amministratore di sistema può quindi impostare il RatingLevels
per il quale è richiesto un commento. Queste impostazioni sono disponibili tramite un servizio di impostazioni.
Quindi, per convalidare completamente il modello ho bisogno di informazioni esterne ad esso, in questo caso il servizio di impostazioni.
Ho considerato il seguente finora:
- Iniettare il servizio nel modello.DefaultModelBinder utilizza System.Activator per creare l'oggetto in modo che non passi attraverso il resolver di dipendenza normale e non riesca ad iniettare il servizio nel modello senza creare un nuovo modello di raccoglitore (oltre al quale, non sembra il modo corretto andare su di esso).
- Inietta il servizio in un'annotazione. Non sono ancora sicuro che sia possibile, ma lo esamineremo presto. Si sente ancora goffo.
- Utilizzare un raccoglitore modello personalizzato. Apparentemente posso implementare OnPropertyValidating per eseguire la convalida della proprietà personalizzata. Questo sembra il più preferibile finora, anche se non sono ancora sicuro di come farlo.
Quale metodo, sopra o no, è più adatto a questo tipo di problema di convalida?
Sto usando MVC5 ma penso che quanto sopra sia ancora rilevante. Hai detto che "IDependencyResolver di MVC tenterà di risolvere il provider". Ma come registreresti il provider con il contenitore IoC? (Unità nel mio caso). – Ben