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)));
     }
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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)));
            }
Exemplo n.º 6
0
            public ConsumedCapability Access(MemberAccessPath _, Task <IDisposable?> task)
            {
                var proxyTask = task.AsProxyTask();

                return(_callContext._censorCapability.Policy.Attach <ConsumedCapability>(new LocalAnswerCapability(proxyTask)));
            }
Exemplo n.º 7
0
 public ConsumedCapability Access(MemberAccessPath access)
 {
     return(_callContext._censorCapability.Policy.Attach <ConsumedCapability>(new LocalAnswerCapability(WhenReturned, access)));
 }
Exemplo n.º 8
0
 public ConsumedCapability Access(MemberAccessPath access, Task <IDisposable> proxyTask)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 9
0
 public ConsumedCapability Access(MemberAccessPath access)
 {
     throw new NotImplementedException();
 }