Exemplo n.º 1
0
        /// <summary>
        /// Create type descriptor from given type.
        /// </summary>
        /// <param name="type">Type from which descriptor will be created.</param>
        /// <param name="resolver">The generic parameter resolver.</param>
        /// <returns>Created type descriptor.</returns>
        public static TypeDescriptor Create(Type type, ParameterResolver resolver = null)
        {
            var builder = new TypeDescriptorBuilder();

            if (resolver == null)
            {
                //create default routine for parameters resolver
                var parameters = new Dictionary <Type, int>();
                resolver = (t) =>
                {
                    int number;
                    if (!parameters.TryGetValue(t, out number))
                    {
                        number = parameters.Count;
                        parameters.Add(t, number);
                    }

                    return(TypeDescriptor.GetParameter(number));
                };
            }

            var adapter = new TypeAdapter(type);
            var result  = TypeHierarchyDirector.BuildDescriptor(adapter, (a) => resolver((a as TypeAdapterBase <Type>).AdaptedType));

            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Build TypeDescriptor from given TypeReference. Available substitutions are used.
        /// </summary>
        /// <param name="type">TypeReference which descriptor is builded</param>
        /// <returns>Built TypeDescriptor if available, <c>null</c> otherwise</returns>
        internal TypeDescriptor BuildDescriptor(TypeReference type)
        {
            if (type == null)
            {
                return(null);
            }

            var adapted = new TypeReferenceAdapter(type);

            return(TypeHierarchyDirector.BuildDescriptor(adapted, resolveSubstitution));
        }