protected MefBootstrapper()
        {
            AdditionalCatalogs = new AggregateCatalog();

            IgnorePathPatterns = new List <string>();

            _bootrapperConfiguration = new BootrapperConfiguration();

            AppDomain currentDomain = AppDomain.CurrentDomain;

            currentDomain.AssemblyResolve += TryResolveMissingAssembly;
        }
        protected override IEnumerable <Assembly> SelectAssemblies()
        {
            _bootrapperConfiguration = new BootrapperConfiguration();

            if (DesignTimeHelper.IsInDesignModeStatic)
            {
                return(null);
            }

            var paths = new List <string>();

            // collect all assemblies with catalog and safe it for later use
            var    uri      = new Uri(Assembly.GetAssembly(typeof(MefBootstrapper)).CodeBase);
            string rootPath = GetRootPath(uri.LocalPath);

            paths.Add(rootPath);
            foreach (var additionalLookupPath in _bootrapperConfiguration.AdditionalLookupPaths)
            {
                paths.Add(rootPath + "\\" + additionalLookupPath);
            }

            var logger = new Log4NetLogger();

            logger.Init(GetType());
            _recursiveDirectoryCatalog = new SafeRecursiveDirectoryCatalog(
                logger,
                paths.ToArray(),
                _bootrapperConfiguration.MEFAssemblyNamePattern,
                _bootrapperConfiguration.IgnorePathPatterns);

            IList <Assembly> list = new List <Assembly>();

            list.Add(Assembly.GetEntryAssembly());

            foreach (string assemblyPath in _recursiveDirectoryCatalog.LoadedAssemblies)
            {
                list.Add(Assembly.LoadFrom(assemblyPath));
            }

            return(list);
        }