public override Task Invoke(AspectContext context, AspectDelegate next) { var dataValidator = context.ServiceProvider.GetService(typeof(IDataValidator)) as IDataValidator; CheckResolved(dataValidator); var dataStateFactory = context.ServiceProvider.GetService(typeof(IDataStateFactory)) as IDataStateFactory; CheckResolved(dataStateFactory); var dataValidationContext = new DataValidationContext(context); dataValidator.Validate(dataValidationContext); context.SetDataValidationContext(dataValidationContext); var dataState = dataStateFactory.CreateDataState(dataValidationContext); if (context.Implementation is IDataStateProvider dataStateProvider) { dataStateProvider.DataState = dataState; } else { var implementationTypeInfo = context.Implementation.GetType().GetTypeInfo(); var dataStateProperty = implementationTypeInfo.GetProperty("DataState"); if (dataStateProperty != null && dataStateProperty.CanWrite) { dataStateProperty.GetReflector().SetValue(context.Implementation, dataState); } } return(context.Invoke(next)); }
public IDataState CreateDataState(DataValidationContext dataValidationContext) { var dataValidationErrors = new DataValidationErrorCollection(); foreach (var error in dataValidationContext.DataMetaDatas.SelectMany(x => x.Errors)) { dataValidationErrors.Add(error); } var isValid = dataValidationContext.DataMetaDatas.All(x => x.State != DataValidationState.Invalid); return(new DataState(isValid, dataValidationErrors)); }
public static void SetDataValidationContext(this AspectContext aspectContext, DataValidationContext dataValidationContext) { if (aspectContext == null) { throw new ArgumentNullException(nameof(aspectContext)); } if (dataValidationContext == null) { throw new ArgumentNullException(nameof(dataValidationContext)); } aspectContext.AdditionalData[DataValidationContextKey] = dataValidationContext; }