protected virtual ParameterType ResolveParameterType(ParameterInfo parameterInfo, string url)
        {
            if (parameterInfo.HasAttribute<ContentAttribute>())
            {
                return ParameterType.Content;
            }

            return url.Contains(CreateRouteSegmentId(parameterInfo.Name))
                            ? ParameterType.Route
                            : ParameterType.Query;
        }
예제 #2
0
        static InjectableInfo CreateForConstructorParam(
            Type enclosingType, ParameterInfo paramInfo)
        {
            var injectAttr = paramInfo.Attribute<InjectAttribute>();

            return new InjectableInfo()
            {
                Optional = paramInfo.HasAttribute(typeof(InjectOptionalAttribute)),
                Identifier = (injectAttr == null ? null : injectAttr.Identifier),
                SourceName = paramInfo.Name,
                ContractType = paramInfo.ParameterType,
                EnclosingType = enclosingType,
            };
        }
예제 #3
0
        static InjectableInfo CreateInjectableInfoForParam(
            Type parentType, ParameterInfo paramInfo)
        {
            var identifier = paramInfo.AllAttributes<InjectAttribute>().Select(x => x.Identifier)
                .Concat(paramInfo.AllAttributes<InjectOptionalAttribute>().Select(x => x.Identifier)).FirstOrDefault();

            return new InjectableInfo(
                paramInfo.HasAttribute(typeof(InjectOptionalAttribute)),
                identifier,
                paramInfo.Name,
                paramInfo.ParameterType,
                parentType,
                null);
        }
예제 #4
0
파일: Parameter.cs 프로젝트: serra/CLAP
        internal Parameter(ParameterInfo parameter)
        {
            Debug.Assert(parameter != null);

            Names = new List<string>();

            // Names are stored as lower-case.
            // The first available name is the parameters's original name.
            //
            Names.Add(parameter.Name.ToLowerInvariant());

            ParameterInfo = parameter;

            Required = parameter.HasAttribute<RequiredAttribute>();

            if (parameter.HasAttribute<DefaultValueAttribute>())
            {
                Default = parameter.GetAttribute<DefaultValueAttribute>().DefaultValue;
            }

            if (parameter.HasAttribute<DefaultProviderAttribute>())
            {
                DefaultProvider = (DefaultProvider)Activator.CreateInstance(
                    parameter.GetAttribute<DefaultProviderAttribute>().DefaultProviderType);
            }

            if (parameter.HasAttribute<DescriptionAttribute>())
            {
                Description = parameter.GetAttribute<DescriptionAttribute>().Description;
            }

            if (parameter.HasAttribute<AliasesAttribute>())
            {
                Names.AddRange(parameter.GetAttribute<AliasesAttribute>().Aliases.ToLowerInvariant().CommaSplit());
            }

            if (parameter.HasAttribute<SeparatorAttribute>())
            {
                Separator = parameter.GetAttribute<SeparatorAttribute>().Separator;
            }
        }
예제 #5
0
 private static string GetType( ParameterInfo parameter )
 {
     bool isParams = parameter.ParameterType.IsArray && parameter.HasAttribute<ParamArrayAttribute>();
     string prefix = isParams ? "params " : string.Empty;
     return prefix + parameter.ParameterType.Name();
 }