public static void CreateDelegateFromBridge <T>(string bridgeMethodName, out T delg) { if (bridge == null) { ProfilerInterceptor.ThrowElevatedMockingException(); } var method = bridge.GetMethod(bridgeMethodName); delg = (T)(object)Delegate.CreateDelegate(typeof(T), method); }
public static void WrapCallToDelegate <T>(string wrappedDelegateFieldName, out T delg) { if (bridge == null) { ProfilerInterceptor.ThrowElevatedMockingException(); } var wrappedDelegateField = bridge.GetField(wrappedDelegateFieldName); var invokeMethod = wrappedDelegateField.FieldType.GetMethod("Invoke"); var parameters = invokeMethod.GetParameters().Select(p => Expression.Parameter(p.ParameterType, "")).ToArray(); var caller = Expression.Call(Expression.Field(null, wrappedDelegateField), invokeMethod, parameters); delg = (T)(object)Expression.Lambda(typeof(T), caller, parameters).Compile(); }