private MemberAccessPath FollowPath(Type type, string[] memberNames, IMemberProvider memberProvider) { var accessPath = new MemberAccessPath(); var bindingAttributes = BindingFlags.Instance | BindingFlags.Public; if (!memberProvider.IgnoreNonPublicMembers) { bindingAttributes |= BindingFlags.NonPublic; } foreach (var splitName in memberNames) { var members = type.GetMember(splitName, bindingAttributes); if (members == null || members.Length == 0) { return(null); } var sourceMember = members?[0]; type = sourceMember.GetMemberType(); accessPath.Add(sourceMember); } return(accessPath); }
public ConsumedCapability?Access(MemberAccessPath access) { if (_futureResult.Task.IsCompleted) { try { return(access.Eval(WhenReturned.Result)); } catch (AggregateException exception) { throw exception.InnerException !; } } else { return(new LazyCapability(AccessWhenReturned(access))); } }
private MemberAccessPath FollowPathFlattening(Type type, IEnumerable <string> memberNames, IMemberProvider memberProvider) { var accessPath = new MemberAccessPath(); var bindingAttributes = BindingFlags.Instance | BindingFlags.Public; if (!memberProvider.IgnoreNonPublicMembers) { bindingAttributes |= BindingFlags.NonPublic; } foreach (var splitName in memberNames) { var members = type.GetMember(splitName, bindingAttributes); if (members.Length == 0) { var getMethodPrefixes = new string[] { "Get_", "Get", "get", "get_" }; foreach (var prefix in getMethodPrefixes) { members = type.GetMember(prefix + splitName, bindingAttributes); if (members.Length > 0) { break; } } if (members.Length == 0) { return(null); } } var sourceMember = members?[0]; type = sourceMember.GetMemberType(); accessPath.Add(sourceMember); } return(accessPath); }
private MemberAccessPath FollowPathFlattening(Type type, IEnumerable <string> memberNames, IMemberProvider memberProvider) { var accessPath = new MemberAccessPath(type); foreach (var splitName in memberNames) { var members = memberProvider.GetMembers(type) .Where(m => m.Name == splitName).ToArray(); if (members.Length == 0) { var getMethodPrefixes = new string[] { "Get_", "Get", "get", "get_" }; foreach (var prefix in getMethodPrefixes) { members = memberProvider.GetMembers(type) .Where(m => m.Name == prefix + splitName).ToArray(); if (members.Length > 0) { break; } } if (members.Length == 0) { return(null); } } var sourceMember = members?[0]; type = sourceMember.GetMemberType(); accessPath.Add(sourceMember); } return(accessPath); }
async Task <Proxy> AccessWhenReturned(MemberAccessPath access) { await WhenReturned; return(new Proxy(Access(access))); }
public ConsumedCapability Access(MemberAccessPath _, Task <IDisposable?> task) { var proxyTask = task.AsProxyTask(); return(_callContext._censorCapability.Policy.Attach <ConsumedCapability>(new LocalAnswerCapability(proxyTask))); }
public ConsumedCapability Access(MemberAccessPath access) { return(_callContext._censorCapability.Policy.Attach <ConsumedCapability>(new LocalAnswerCapability(WhenReturned, access))); }
public ConsumedCapability Access(MemberAccessPath access, Task <IDisposable> proxyTask) { throw new NotImplementedException(); }
public ConsumedCapability Access(MemberAccessPath access) { throw new NotImplementedException(); }