public object InvokeGet(IRibbonControl control, Expression <Action> caller, params object[] parameters) { if (control.Context == null) { return(null); } var methodName = caller.GetMethodName(); CallbackTarget callbackTarget = vstoContribContext.TagToCallbackTargetLookup[control.Tag + methodName]; var view = (object)control.Context; IRibbonViewModel viewModelInstance = ribbonViewModelResolver.ResolveInstanceFor(view); VstoContribLog.Debug(l => l("Ribbon callback {0} being invoked on {1} (View: {2}, ViewModel: {3})", methodName, control.Id, view.ToLogFormat(), viewModelInstance.ToLogFormat())); Type type = viewModelInstance.GetType(); PropertyInfo property = type.GetProperty(callbackTarget.Method); if (property != null) { return(type.InvokeMember(callbackTarget.Method, BindingFlags.GetProperty, null, viewModelInstance, null)); } try { return(type.InvokeMember(callbackTarget.Method, BindingFlags.InvokeMethod, null, viewModelInstance, new[] { control } .Concat(parameters) .ToArray())); } catch (MissingMethodException) { throw new InvalidOperationException( string.Format("Expecting method with signature: {0}.{1}(IRibbonControl control)", type.Name, callbackTarget.Method)); } }
public object InvokeGet(IRibbonControl control, Expression <Action> caller, params object[] parameters) { CallbackTarget callbackTarget = vstoContribContext.TagToCallbackTargetLookup[control.Tag + caller.GetMethodName()]; IRibbonViewModel viewModelInstance = ribbonViewModelResolver.ResolveInstanceFor(control.Context); Type type = viewModelInstance.GetType(); PropertyInfo property = type.GetProperty(callbackTarget.Method); if (property != null) { return(type.InvokeMember(callbackTarget.Method, BindingFlags.GetProperty, null, viewModelInstance, null)); } try { return(type.InvokeMember(callbackTarget.Method, BindingFlags.InvokeMethod, null, viewModelInstance, new[] { control } .Concat(parameters) .ToArray())); } catch (MissingMethodException) { throw new InvalidOperationException( string.Format("Expecting method with signature: {0}.{1}(IRibbonControl control)", type.Name, callbackTarget.Method)); } }