private static List <Microsoft.Cci.ErrorEventArgs> ValidateAssembly(HostEnvironment host, IAssembly assembly) { Contract.Requires(host != null); Contract.Ensures(Contract.Result <List <Microsoft.Cci.ErrorEventArgs> >() != null); List <Microsoft.Cci.ErrorEventArgs> errorEvents = new List <Microsoft.Cci.ErrorEventArgs>(); host.Errors += (object sender, Microsoft.Cci.ErrorEventArgs e) => { lock (errorEvents) errorEvents.Add(e); }; // MB: without lock I'm getting exceptions var mv = new MetadataValidator(host); mv.Validate(assembly); return(errorEvents); }
private void resetValidationItems(MetadataValidator metadataValidator) { ValidationItems.Clear(); if (metadataValidator.ValidationItems == null) // metadataValidator.IsValid { return; } foreach (var validationItem in metadataValidator.ValidationItems) { //if (!((MetadataValidationError)validationItem).Definition.IsReadOnly) ValidationItems.Add(validationItem); } RaisePropertyChanged(() => ValidationItems); }
/// <summary> /// Use this method to automatically apply model validation, /// when calling actions that require it. /// /// By default, model validation is NOT executed if actions /// are called outside the MVC context, e.g. in testing. To /// make sure that validation is executed, call this method /// and let it call the action. Do not call it directly. /// </summary> public static ActionResult CallWithModelValidation <TC, TR, TM>(this TC controller, Func <TC, TR> action, TM model) where TC : Controller where TR : ActionResult where TM : class { //Perform model validation var validator = new MetadataValidator(model); //Add each model error to the model state foreach (var error in validator.ValidationErrors) { var defaultKey = "N/A" + new Random().Next(); var memberName = error.MemberNames.FirstOrDefault() ?? defaultKey; controller.ModelState.AddModelError(memberName, error.ErrorMessage); } //Return the action return(action(controller)); }