/// <summary> /// Create a dynamic type representation of a method /// </summary> public static DynamicInvoke CreateDynamicInvoke(this MethodInfo methodInfo) { if (methodInfo == null) { throw new ArgumentNullException(nameof(methodInfo)); } var invokeDelegate = FluentIl.CreateInvoke(methodInfo); var access = GetAccessModifiers(methodInfo); var visibility = GetVisibilityModifiers(methodInfo); return(new DynamicInvoke(methodInfo, access, visibility, invokeDelegate)); }
/// <summary> /// Create a dynamic type representation of a constructor /// </summary> public static DynamicCtor CreateDynamicCtor(this ConstructorInfo constructorInfo, bool allowNonPublic = true) { if (constructorInfo == null) { throw new ArgumentNullException(nameof(constructorInfo)); } var declaringType = constructorInfo.DeclaringType; var ctorDelegate = FluentIl.CreateConstructor(declaringType, constructorInfo, allowNonPublic); var access = GetAccessModifiers(constructorInfo); var visibility = GetVisibilityModifiers(constructorInfo); return(new DynamicCtor(declaringType, constructorInfo, access, visibility, ctorDelegate)); }
/// <summary> /// Create a dynamic type representation of a setter /// </summary> public static DynamicSetter CreateDynamicSetter(this FieldInfo fieldInfo) { if (fieldInfo == null) { throw new ArgumentNullException(nameof(fieldInfo)); } var setterDelegate = FluentIl.CreateSetter(fieldInfo); if (setterDelegate == null) { return(null); } var access = GetAccessModifiers(fieldInfo); var visibility = GetVisibilityModifiers(fieldInfo); return(new DynamicSetter(access, visibility, setterDelegate)); }
/// <summary> /// Create a dynamic type representation of a setter /// </summary> public static DynamicSetter CreateDynamicSetter(this PropertyInfo propertyInfo) { if (propertyInfo == null) { throw new ArgumentNullException(nameof(propertyInfo)); } var setterDelegate = FluentIl.CreateSetter(propertyInfo); if (setterDelegate == null) { return(null); } var setMethod = propertyInfo.GetSetMethod(true); var access = GetAccessModifiers(setMethod); var visibility = GetVisibilityModifiers(setMethod); return(new DynamicSetter(access, visibility, setterDelegate)); }
/// <summary> /// Create a dynamic type representation of a constructor /// </summary> public static DynamicCtor CreateDynamicCtor(this Type declaringType, Type[] parameterTypes, bool allowNonPublic = true) { if (declaringType == null) { throw new ArgumentNullException(nameof(declaringType)); } var binderFlags = BindingFlags.Instance | BindingFlags.Public; if (allowNonPublic) { binderFlags |= BindingFlags.NonPublic; } var constructorInfo = declaringType.GetConstructor(binderFlags, null, parameterTypes, null); CtorDelegate ctorDelegate; AccessModifiers access; VisibilityModifiers visibility; if (constructorInfo == null) { if ((parameterTypes.Length != 0) || (declaringType.IsValueType == false)) { throw new InvalidOperationException("Constructor is not defined"); } ctorDelegate = FluentIl.CreateConstructor(declaringType, null, allowNonPublic); access = GetAccessModifiers(declaringType); visibility = GetVisibilityModifiers(declaringType); } else { ctorDelegate = FluentIl.CreateConstructor(declaringType, constructorInfo, allowNonPublic); access = GetAccessModifiers(constructorInfo); visibility = GetVisibilityModifiers(constructorInfo); } return(new DynamicCtor(declaringType, constructorInfo, access, visibility, ctorDelegate)); }
private static GetterDelegate CreateAccessor(Type taskType) { var propertyInfo = taskType.GetProperty("Result"); return(propertyInfo != null?FluentIl.CreateGetter(propertyInfo) : null); }