/// <summary> /// Adds all consumers in the specified assemblies matching the namespace /// </summary> /// <param name="configurator"></param> /// <param name="type">The type to use to identify the assembly and namespace to scan</param> /// <param name="filter"></param> public static void AddConsumersFromNamespaceContaining(this IRegistrationConfigurator configurator, Type type, Func <Type, bool> filter = null) { if (type == null) { throw new ArgumentNullException(nameof(type)); } if (type.Assembly == null || type.Namespace == null) { throw new ArgumentException($"The type {TypeMetadataCache.GetShortName(type)} is not in an assembly with a valid namespace", nameof(type)); } IEnumerable <Type> types; if (filter != null) { bool IsAllowed(Type candidate) { return(TypeMetadataCache.IsConsumerOrDefinition(candidate) && filter(candidate)); } types = FindTypesInNamespace(type, IsAllowed); } else { types = FindTypesInNamespace(type, TypeMetadataCache.IsConsumerOrDefinition); } AddConsumers(configurator, types.ToArray()); }