public override bool TryGetMember(GetMemberBinder binder, out object?result) { MemberInfo[] members = type.GetMember(binder.Name, BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (members.Length == 0) { result = null; return(false); } if (members.Length == 1) { result = members[0] switch { PropertyInfo pi => pi.GetValue(this._obj, null), FieldInfo fi => fi.GetValue(this._obj), _ => throw new NotImplementedException("member not field or property") }; if (result == null) { return(true); } result = new NonPublicMembersDynamicWrapper(result); return(true); } throw new InvalidOperationException($"Multiple members with name '{binder.Name}'"); }
public override bool TryInvokeMember(InvokeMemberBinder binder, object?[]?args, out object?result) { MethodInfo?method = type.GetMethod(binder.Name, BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method == null) { result = null; return(false); } result = method.Invoke(_obj, args); if (result != null) { result = new NonPublicMembersDynamicWrapper(result); } return(true); }