/// <summary>
        /// 添加模块
        /// </summary>
        /// <param name="services"></param>
        /// <param name="contentRootPath"></param>
        /// <returns></returns>
        public static IServiceCollection AddModules(this IServiceCollection services, string contentRootPath)
        {
            GlobalConfiguration.Modules = _moduleConfigurationManager.GetModules();
            ModuleAssemblyLoadContext context = new ModuleAssemblyLoadContext();

            foreach (var module in GlobalConfiguration.Modules)
            {
                //
                var moduleFolder = new DirectoryInfo(Path.Combine(contentRootPath, $@"Modules\{module.Id}\{module.Id}.dll"));
                using FileStream fs = new FileStream(moduleFolder.FullName, FileMode.Open);
                module.Assembly     = context.LoadFromStream(fs);
                //
                RegisterModuleInitializerServices(module, ref services);
            }
            return(services);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 添加模块
 /// </summary>
 /// <param name="services"></param>
 /// <param name="contentRootPath"></param>
 /// <returns></returns>
 public static IServiceCollection AddModules(this IServiceCollection services, string contentRootPath)
 {
     try
     {
         GlobalConfiguration.Modules = _moduleConfigurationManager.GetModules();
         ModuleAssemblyLoadContext context = new ModuleAssemblyLoadContext();
         foreach (var module in GlobalConfiguration.Modules)
         {
             var dllFilePath  = Path.Combine(contentRootPath, $@"Modules/{module.Id}/{module.Id}.dll");
             var moduleFolder = new DirectoryInfo(dllFilePath);
             if (File.Exists(moduleFolder.FullName))
             {
                 using FileStream fs = new FileStream(moduleFolder.FullName, FileMode.Open);
                 module.Assembly     = context.LoadFromStream(fs);
                 //
                 RegisterModuleInitializerServices(module, ref services);
             }
             else
             {
                 _logger.Warn($"{dllFilePath} file is not find!");
             }
             //处理视图文件程序集加载
             var viewsFilePath = Path.Combine(contentRootPath, $@"Modules/{module.Id}/{module.Id}.Views.dll");
             moduleFolder = new DirectoryInfo(viewsFilePath);
             if (File.Exists(moduleFolder.FullName))
             {
                 using FileStream viewsFileStream = new FileStream(moduleFolder.FullName, FileMode.Open);
                 module.ViewsAssembly             = context.LoadFromStream(viewsFileStream);
             }
             else
             {
                 _logger.Warn($"{viewsFilePath} file is not find!");
             }
         }
     }
     catch (Exception ex)
     {
         _logger.Error(ex);
     }
     return(services);
 }