예제 #1
0
        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);
        }
예제 #2
0
        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();
        }