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); }
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); }