internal static ResourceInfoAttribute GetMostInheritedResourceInterfaceInfo( this IClientTypeResolver client, Type sourceType) { ResourceInfoAttribute sourceTypeResourceInfo; if (client.TryGetResourceInfoForType(sourceType, out sourceTypeResourceInfo)) { return(sourceTypeResourceInfo); } var allResourceInfos = sourceType.GetInterfaces().Select( x => { ResourceInfoAttribute resourceInfo; if (!client.TryGetResourceInfoForType(x, out resourceInfo)) { resourceInfo = null; } return(resourceInfo); }).Where(x => x != null).ToList(); var mostSubtyped = allResourceInfos .FirstOrDefault( x => !allResourceInfos.Any( y => x.InterfaceType != y.InterfaceType && x.InterfaceType.IsAssignableFrom(y.InterfaceType))); return(mostSubtyped); }
public static ResourceInfoAttribute GetResourceInfoForType(this IClientTypeResolver client, Type type) { ResourceInfoAttribute resourceInfoAttribute; if (!client.TryGetResourceInfoForType(type, out resourceInfoAttribute)) { throw new InvalidOperationException( "Unable to find ResourceInfoAttribute for type " + type.FullName); } return(resourceInfoAttribute); }