Ejemplo n.º 1
0
 private TAttribute GetAttributeFromRegexExportRule <TAttribute>(RegexExportRule rule) where TAttribute : Attribute
 {
     if (rule.ExportAttribute is TAttribute attribute)
     {
         return(attribute);
     }
     return(rule.AdditionalAttributes.FirstOrDefault(a => a is TAttribute) as TAttribute);
 }
Ejemplo n.º 2
0
        public TAttribute GetAttribute <TAttribute>(Type type) where TAttribute : Attribute
        {
            Requires.NotNull(type, nameof(type));

            if (type.FullName == null || !_spec.AssemblySpecs.ContainsKey(type.GetTypeInfo().Assembly))
            {
                return(null);
            }

            AssemblySpec assemblySpec = _spec.AssemblySpecs[type.GetTypeInfo().Assembly];

            if (type.GetTypeInfo().IsClass)
            {
                RegexExportRule rule = assemblySpec.ClassRegexExportRules.FirstOrDefault(kvp => Regex.IsMatch(type.FullName, kvp.Key)).Value;
                if (rule != null)
                {
                    return(GetAttributeFromRegexExportRule <TAttribute>(rule));
                }

                rule = assemblySpec.InterfaceRegexExportRules.FirstOrDefault(kvp => Regex.IsMatch(type.FullName, kvp.Key)).Value;
                if (rule != null)
                {
                    return(GetAttributeFromRegexExportRule <TAttribute>(rule));
                }
            }
            else if (type.GetTypeInfo().IsEnum)
            {
                RegexExportRule rule = assemblySpec.EnumRegexExportRules.FirstOrDefault(kvp => Regex.IsMatch(type.FullName, kvp.Key)).Value;
                if (rule != null)
                {
                    return(GetAttributeFromRegexExportRule <TAttribute>(rule));
                }
            }

            return(null);
        }