private IEnumerable <Type> GetTypesAssignableToInternal(TypeInfo typeInfo, ScanningStrategy strategy)
        {
            foreach (var assembly in this.assemblies.Value)
            {
                if (assembly.IsDynamic)
                {
                    continue;
                }

                if (!strategy.Invoke(assembly))
                {
                    continue;
                }

                foreach (var exportedType in assembly.ExportedTypes)
                {
                    var exportedTypeInfo = exportedType.GetTypeInfo();

                    if (exportedTypeInfo.IsAbstract)
                    {
                        continue;
                    }

                    if (exportedTypeInfo.IsAssignableTo(typeInfo))
                    {
                        yield return(exportedType);
                    }
                }
            }
        }
        public IEnumerable <Type> GetTypesAssignableTo(Type targetType, ScanningStrategy strategy)
        {
            Check.NotNull(targetType, nameof(targetType));
            Check.NotNull(strategy, nameof(strategy));

            var targetTypeInfo = targetType.GetTypeInfo();

            return(this.GetTypesAssignableToInternal(targetTypeInfo, strategy));
        }
Example #3
0
        public IEnumerable <Type> GetTypesAssignableTo(Type type, ScanningStrategy strategy)
        {
            Check.NotNull(type, nameof(type));
            Check.NotNull(strategy, nameof(strategy));

            var typeInfo = type.GetTypeInfo();

            foreach (var catalogType in this.types)
            {
                var catalogTypeInfo = catalogType.GetTypeInfo();

                if (!catalogTypeInfo.IsAssignableTo(typeInfo))
                {
                    continue;
                }

                if (strategy.Invoke(catalogTypeInfo.Assembly))
                {
                    yield return(catalogType);
                }
            }
        }
 public static IEnumerable <Type> GetTypesAssignableTo <T>(this ITypeCatalog typeCatalog, ScanningStrategy strategy)
 {
     return(typeCatalog.GetTypesAssignableTo(typeof(T), strategy));
 }