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));
        }