/// <summary>
        /// Applies the specified <paramref name="mitigation"/> for the specified <paramref name="entity"/>.
        /// </summary>
        /// <param name="entity">The entity for which a mitigation is applied.</param>
        /// <param name="mitigation">The mitigation to apply.</param>
        /// <returns>true if a mitigation was applied; otherwise, false.</returns>
        public bool DoMitigate(ReactiveEntity entity, ReactiveEntityRecoveryFailureMitigation mitigation)
        {
            OnAll(entity);

            return(mitigation switch
            {
                ReactiveEntityRecoveryFailureMitigation.Ignore => OnIgnore(entity),
                ReactiveEntityRecoveryFailureMitigation.Remove => OnRemove(entity),
                ReactiveEntityRecoveryFailureMitigation.Regenerate => OnRegenerate(entity),
                _ => false,
            });
Example #2
0
            private bool OnEntityLoadFailed(Uri uri, IReactiveResource entity, ReactiveEntityKind kind, Exception error, out ReactiveEntityRecoveryFailureMitigation mitigation)
            {
                mitigation = ReactiveEntityRecoveryFailureMitigation.Ignore;

                if (error is MitigationBailOutException)
                {
                    return(true);
                }

                var entityLoadFailed = Parent.EntityLoadFailed;

                if (entityLoadFailed != null)
                {
                    var e = new ReactiveEntityLoadFailedEventArgs(uri, entity, kind, error);

                    entityLoadFailed.InvokeSafe(Parent, e);

                    mitigation = e.Mitigation;
                    return(e.Handled);
                }

                return(false);
            }