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