/// <summary>
        ///     Method responsible for configuring module catalog
        /// </summary>
        /// <param name="catalog">module catalog</param>
        public virtual void ConfigureModuleCatalog(IModuleCatalog catalog)
        {
            var modulesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Modules");

            var modules = new DirectoryInfo(modulesPath).GetDirectories();
            var dlls    = new DirectoryInfo(modulesPath).GetFiles("*.dll").ToList();

            foreach (var directoryInfo in modules)
            {
                var sub = directoryInfo.GetFiles("*.dll");
                dlls.AddRange(sub);
            }
            LoadModule(catalog, dlls);
        }
 private void LoadModule(IModuleCatalog catalog, IEnumerable <FileInfo> dlls)
 {
     foreach (var fileInfo in dlls)
     {
         try
         {
             var assembly2 = Assembly.LoadFrom(fileInfo.FullName);
             var types     = assembly2.GetTypes();
             foreach (var type in types)
             {
                 if (type.GetInterfaces().Contains(typeof(IModule)))
                 {
                     logger.InfoFormat("Going To load module {0}", fileInfo.FullName);
                     LoadModule(catalog, type, fileInfo);
                 }
             }
         }
         catch (Exception ex)
         {
             logger.ErrorFormat("Could not load {0}", ex, fileInfo.FullName);
         }
     }
 }
 protected void LoadModule(IModuleCatalog catalog, Type type, FileInfo moduleFile)
 {
     catalog.AddModule(type.Name, type.AssemblyQualifiedName, new Uri(moduleFile.FullName, UriKind.RelativeOrAbsolute));
 }