public static void AssembliesFromPath(this IAssemblyScanner scanner, string path,
            Predicate<Assembly> assemblyFilter)
        {
            var assemblyPaths = Directory.GetFiles(path)
                .Where(file =>
                    Path.GetExtension(file).Equals(
                        ".exe",
                        StringComparison.OrdinalIgnoreCase)
                    ||
                    Path.GetExtension(file).Equals(
                        ".dll",
                        StringComparison.OrdinalIgnoreCase));

            foreach (var assemblyPath in assemblyPaths)
            {
                Assembly assembly = null;
                try
                {
                    assembly = Assembly.LoadFrom(assemblyPath);
                }
                catch
                {
                }
                if (assembly != null && assemblyFilter(assembly)) scanner.Assembly(assembly);
            }
        }
        public static void TheCallingAssembly(this IAssemblyScanner scanner)
        {
            var callingAssembly = findTheCallingAssembly();

            if (callingAssembly != null)
            {
                scanner.Assembly(callingAssembly);
            }
        }
        public static void AssembliesFromApplicationBaseDirectory(this IAssemblyScanner scanner, Func<Assembly, bool> assemblyFilter)
        {
            var assemblies = AssemblyFinder.FindAssemblies(assemblyFilter, txt =>
            {
                Console.WriteLine("StructureMap could not load assembly from file " + txt);
            }, includeExeFiles: false);

            foreach (var assembly in assemblies)
            {
                scanner.Assembly(assembly);
            }
        }
        public static void AssembliesAndExecutablesFromPath(this IAssemblyScanner scanner, string path)
        {
            var assemblies = AssemblyFinder.FindAssemblies(path, txt =>
            {
                Console.WriteLine("StructureMap could not load assembly from file " + txt);
            }, includeExeFiles: true);

            foreach (var assembly in assemblies)
            {
                scanner.Assembly(assembly);
            }
        }
        public static void AssembliesFromPath(this IAssemblyScanner scanner, string path,
            Func<Assembly, bool> assemblyFilter, bool includeExeFiles = false)
        {
            var assemblies = AssemblyFinder.FindAssemblies(path, txt =>
            {
                Console.WriteLine("StructureMap could not load assembly from file " + txt);
            }, includeExeFiles: includeExeFiles).Where(assemblyFilter);


            foreach (var assembly in assemblies)
            {
                scanner.Assembly(assembly);
            }
        }
 public static void AssembliesFromLibraryManager(this IAssemblyScanner scanner, Func<Assembly, bool> filter)
 {
     var loadContext = PlatformServices.Default.AssemblyLoadContextAccessor.Default;
     var libraryManager = PlatformServices.Default.LibraryManager;
     var assemblyNames = libraryManager.GetLibraries().SelectMany(l => l.Assemblies);
     var scanned = new List<string>();
     foreach (var assemblyName in assemblyNames)
     {
         if (scanned.Contains(assemblyName.FullName))
         {
             continue;
         }
         var assembly = loadContext.Load(assemblyName);
         scanned.Add(assemblyName.FullName);
         if (filter(assembly))
         {
             scanner.Assembly(assembly);
         }
     }
 }
 public static void AssembliesFromStartupInfo(this IAssemblyScanner scanner, ProgrammaticStartupInfo info)
 {
     if (info != null)
         foreach (var a in info.PluginAssemblies)
             scanner.Assembly(a);
 }