private static IForwardingStrategy GetForwardingStrategy(
            IInvocation invocation, object anonymous, IDictionary<string, object> properties)
        {
            var forwardingStrategies = GetForwardingStrategyFactory(invocation, anonymous, properties);

            if (invocation.IsIndexProperty())
            {
                return forwardingStrategies.IndexedPropertyAccessor;
            }

            if (invocation.IsGetter())
            {
                return forwardingStrategies.PropertyGetter;
            }

            if (invocation.IsSetter())
            {
                return forwardingStrategies.PropertySetter;
            }

            if (invocation.IsMethodCall())
            {
                return forwardingStrategies.MethodInvoker;
            }

            return new DoNothing();
        }