示例#1
0
        public static IEnumerable <IServiceConfigurationMapping> Scan(this IServiceConfigurationScanner serviceConfigurationScanner, params Type[] types)
        {
            if (serviceConfigurationScanner == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationScanner));
            }

            return(serviceConfigurationScanner.Scan(types));
        }
示例#2
0
        public static IEnumerable <IServiceConfigurationMapping> Scan(this IServiceConfigurationScanner serviceConfigurationScanner, Type type)
        {
            if (serviceConfigurationScanner == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationScanner));
            }

            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            return(serviceConfigurationScanner.Scan(new[] { type }));
        }
示例#3
0
        public static IEnumerable <IServiceConfigurationMapping> Scan(this IServiceConfigurationScanner serviceConfigurationScanner, Assembly assembly)
        {
            if (serviceConfigurationScanner == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationScanner));
            }

            if (assembly == null)
            {
                throw new ArgumentNullException(nameof(assembly));
            }

            return(serviceConfigurationScanner.Scan(new[] { assembly }));
        }
示例#4
0
        public static IEnumerable <IServiceConfigurationMapping> Scan(this IServiceConfigurationScanner serviceConfigurationScanner, IEnumerable <Assembly> assemblies)
        {
            if (serviceConfigurationScanner == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationScanner));
            }

            if (assemblies == null)
            {
                throw new ArgumentNullException(nameof(assemblies));
            }

            assemblies = assemblies.ToArray();

            if (assemblies.Any(assembly => assembly == null))
            {
                throw new ArgumentException("The assembly-collection can not contain null-values.", nameof(assemblies));
            }

            return(serviceConfigurationScanner.Scan(assemblies.SelectMany(assembly => assembly.GetTypes())));
        }
示例#5
0
        /// <summary>
        /// Scan dependencies by service-configuration-attributes.
        /// </summary>
        /// <param name="services">The service-collection instance.</param>
        /// <param name="force">Forces adding of service-descriptors. If true "Add" is used, otherwise "TryAdd" is used.</param>
        /// <param name="scanner">The service-configuration-scanner to use.</param>
        /// <param name="patterns">Patterns for assembly-names to scan. Eg. "RegionOrebroLan", "RegionOrebroLan*", "RegionOrebroLan.*", "*". The default is <code>new[] {"RegionOrebroLan", "RegionOrebroLan.*"}</code>.</param>
        /// <returns></returns>
        public static IServiceCollection ScanDependencies(this IServiceCollection services, bool force, IServiceConfigurationScanner scanner, params string[] patterns)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (scanner == null)
            {
                throw new ArgumentNullException(nameof(scanner));
            }

            if (!patterns.Any())
            {
                patterns = new[] { "RegionOrebroLan", "RegionOrebroLan.*" }
            }
            ;

            var regexPatterns = patterns.Select(pattern => "^" + Regex.Escape(pattern).Replace("\\*", ".*") + "$");

            foreach (var mapping in scanner.Scan(GetAssemblies(regexPatterns)))
            {
                var serviceDescriptor = new ServiceDescriptor(mapping.Configuration.ServiceType, mapping.Type, mapping.Configuration.Lifetime);

                if (force)
                {
                    services.Add(serviceDescriptor);
                }
                else
                {
                    services.TryAdd(serviceDescriptor);
                }
            }

            return(services);
        }

        #endregion
    }