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