public override void PostImplementation(IAlternateMethodContext context, TimerResult timerResult)
            {
                var original = context.ReturnValue as IValueProvider;

                if (original == null)
                {
                    return;
                }

                var originalUnvalidatedValueProvider = original as IUnvalidatedValueProvider;

                if (originalUnvalidatedValueProvider != null)
                {
                    IUnvalidatedValueProvider newUnvalidatedValueProvider;
                    if (AlternateUnvalidatedValueProvider.TryCreate(originalUnvalidatedValueProvider, out newUnvalidatedValueProvider))
                    {
                        context.ReturnValue = newUnvalidatedValueProvider;
                        return;
                    }
                }

                IValueProvider newValueProvider;

                if (AlternateValidatedValueProvider.TryCreate(original, out newValueProvider))
                {
                    context.ReturnValue = newValueProvider;
                }
            }
            public override void PostImplementation(IAlternateMethodContext context, TimerResult timerResult)
            {
                var originalUnvalidatedValueProvider = context.ReturnValue as IUnvalidatedValueProvider;
                var originalEnumerableValueProvider  = context.ReturnValue as IEnumerableValueProvider;

                if (originalUnvalidatedValueProvider != null && originalEnumerableValueProvider != null)
                {
                    IUnvalidatedEnumerableValueProvider newUnvalidatedEnumerableValueProvider;
                    if (AlternateUnvalidatedEnumerableValueProvider.TryCreate(new UnvalidatedEnumerableValueProvider(context.ReturnValue), out newUnvalidatedEnumerableValueProvider))
                    {
                        context.ReturnValue = newUnvalidatedEnumerableValueProvider;
                        return;
                    }
                }
                else if (originalUnvalidatedValueProvider != null)
                {
                    IUnvalidatedValueProvider newUnvalidatedValueProvider;
                    if (AlternateUnvalidatedValueProvider.TryCreate(originalUnvalidatedValueProvider, out newUnvalidatedValueProvider))
                    {
                        context.ReturnValue = newUnvalidatedValueProvider;
                        return;
                    }
                }
                else if (originalEnumerableValueProvider != null)
                {
                    IEnumerableValueProvider newEnumerableValueProvider;
                    if (AlternateValidatedEnumerableValueProvider.TryCreate(originalEnumerableValueProvider, out newEnumerableValueProvider))
                    {
                        context.ReturnValue = newEnumerableValueProvider;
                        return;
                    }
                }

                var originalValueProvider = context.ReturnValue as IValueProvider;

                if (originalValueProvider != null)
                {
                    IValueProvider newValueProvider;
                    if (AlternateValidatedValueProvider.TryCreate(originalValueProvider, out newValueProvider))
                    {
                        context.ReturnValue = newValueProvider;
                    }
                }
            }