示例#1
0
        private void CompleteResolverTypeBindings(
            ITypeInspector inspector,
            INamingConventions naming)
        {
            foreach (ResolverTypeBindingInfo binding in
                     _bindings.OfType <ResolverTypeBindingInfo>()
                     .ToList())
            {
                ComplexTypeBindingInfo typeBinding = null;

                if (binding.SourceType == null)
                {
                    binding.SourceType = typeof(object);
                }

                if (binding.SourceType != null && binding.TypeName.IsEmpty)
                {
                    typeBinding = _bindings.OfType <ComplexTypeBindingInfo>()
                                  .FirstOrDefault(t => t.Type == binding.SourceType);
                    if (typeBinding == null)
                    {
                        binding.TypeName = naming.GetTypeName(
                            binding.SourceType, TypeKind.Object);
                    }
                    else
                    {
                        binding.TypeName = typeBinding.Name;
                    }
                }

                typeBinding = _bindings.OfType <ComplexTypeBindingInfo>()
                              .FirstOrDefault(t => t.Name.Equals(binding.TypeName));
                if (typeBinding == null)
                {
                    _bindings.Add(new ComplexTypeBindingInfo
                    {
                        Name = binding.TypeName,
                        Type = binding.SourceType
                    });
                }
                else if (binding.SourceType == typeof(object))
                {
                    binding.SourceType = typeBinding.Type;
                }

                foreach (ResolverFieldBindingInfo field in binding.Fields)
                {
                    if (field.FieldName.IsEmpty)
                    {
                        field.FieldName = naming.GetMemberName(
                            field.FieldMember, MemberKind.ObjectField);
                    }
                }

                if (binding.BindingBehavior == BindingBehavior.Implicit)
                {
                    AddImplicitResolverBindings(inspector, naming, binding);
                }
            }
        }
示例#2
0
        private static void RegisterFields(
            ComplexTypeBindingInfo binding,
            Dictionary <NameString, RegisteredResolver> registerdResolvers,
            Dictionary <NameString, MemberInfo> members)
        {
            foreach (ComplexTypeFieldBindingInfo field in binding.Fields)
            {
                if (!members.ContainsKey(field.Name) &&
                    !members.ContainsValue(field.Member))
                {
                    members.Add(field.Name, field.Member);

                    if (!registerdResolvers.ContainsKey(field.Name))
                    {
                        registerdResolvers.Add(field.Name,
                                               new RegisteredResolver(
                                                   binding.Type,
                                                   new FieldMember(
                                                       binding.Name,
                                                       field.Name,
                                                       field.Member)));
                    }
                }
            }
        }
示例#3
0
        private TypeBindingInfo CreateTypeBindingInfo(
            IDescriptorContext context,
            ComplexTypeBindingInfo binding)
        {
            var registerdResolvers =
                new Dictionary <NameString, RegisteredResolver>();
            var members = new Dictionary <NameString, MemberInfo>();

            RegisterResolvers(binding, registerdResolvers);

            foreach (ResolverTypeBindingInfo resolverBinding in
                     _bindings.OfType <ResolverTypeBindingInfo>()
                     .Where(t => t.TypeName.Equals(binding.Name)))
            {
                RegisterResolverFields(
                    binding.Name, resolverBinding,
                    registerdResolvers, members);
            }

            RegisterFields(binding, registerdResolvers, members);

            return(new TypeBindingInfo(
                       context,
                       binding.Name,
                       binding.Type,
                       binding.BindingBehavior,
                       registerdResolvers,
                       members));
        }
示例#4
0
        private void CompleteResolverBindings(INamingConventions naming)
        {
            foreach (ResolverBindingInfo binding in
                     _bindings.OfType <ResolverBindingInfo>()
                     .ToList())
            {
                if (binding.TypeName.IsEmpty)
                {
                    ComplexTypeBindingInfo typeBinding =
                        _bindings.OfType <ComplexTypeBindingInfo>()
                        .FirstOrDefault(t => t.Type == binding.SourceType);
                    binding.TypeName = typeBinding == null
                        ? naming.GetTypeName(binding.SourceType)
                        : typeBinding.Name;
                }

                if (binding.FieldName.IsEmpty)
                {
                    binding.FieldName = naming.GetMemberName(
                        binding.Member, MemberKind.ObjectField);
                }

                if (!_bindings.OfType <ComplexTypeBindingInfo>()
                    .Any(t => t.Name.Equals(binding.TypeName)))
                {
                    _bindings.Add(new ComplexTypeBindingInfo
                    {
                        Name = binding.TypeName,
                        Type = binding.SourceType
                    });
                }
            }
        }
示例#5
0
 private void RegisterResolvers(
     ComplexTypeBindingInfo binding,
     IDictionary <NameString, RegisteredResolver> registerdResolvers)
 {
     foreach (ResolverBindingInfo resolver in
              _bindings.OfType <ResolverBindingInfo>()
              .Where(t => t.TypeName.Equals(binding.Name)))
     {
         if (!registerdResolvers.ContainsKey(resolver.FieldName))
         {
             registerdResolvers.Add(resolver.FieldName,
                                    new RegisteredResolver(
                                        binding.Type ?? typeof(object),
                                        new FieldResolver(
                                            binding.Name,
                                            resolver.FieldName,
                                            resolver.Resolver)));
         }
     }
 }