示例#1
0
        /// <summary>
        /// Loads all modules.
        /// </summary>
        /// <returns>All modules</returns>
        public Dictionary <string, AbpModuleInfo> LoadModules()
        {
            Logger.Debug("Loading Abp modules...");

            var modules = new Dictionary <string, AbpModuleInfo>();

            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                foreach (var type in assembly.GetTypes())
                {
                    if (!AbpModuleHelper.IsAbpModule(type))
                    {
                        continue;
                    }

                    var moduleInfo = CreateModuleInfo(type);
                    if (modules.ContainsKey(moduleInfo.Name))
                    {
                        Logger.Warn("Module is loaded before: " + type.FullName);
                        continue;
                    }

                    modules[moduleInfo.Name] = moduleInfo;
                    Logger.Debug("Loaded module: " + moduleInfo);
                }
            }

            Logger.DebugFormat("{0} modules loaded.", modules.Count);
            return(modules);
        }
示例#2
0
    protected virtual void FillModules(
        List <AbpModuleDescriptor> modules,
        IServiceCollection services,
        Type startupModuleType,
        PlugInSourceList plugInSources)
    {
        var logger = services.GetInitLogger <AbpApplicationBase>();

        //All modules starting from the startup module
        foreach (var moduleType in AbpModuleHelper.FindAllModuleTypes(startupModuleType, logger))
        {
            modules.Add(CreateModuleDescriptor(services, moduleType));
        }

        //Plugin modules
        foreach (var moduleType in plugInSources.GetAllModules(logger))
        {
            if (modules.Any(m => m.Type == moduleType))
            {
                continue;
            }

            modules.Add(CreateModuleDescriptor(services, moduleType, isLoadedAsPlugIn: true));
        }
    }
示例#3
0
        public static Type[] GetModulesWithAllDependencies([NotNull] this IPlugInSource plugInSource, ILogger logger)
        {
            Check.NotNull(plugInSource, nameof(plugInSource));

            return(plugInSource
                   .GetModules()
                   .SelectMany(type => AbpModuleHelper.FindAllModuleTypes(type, logger))
                   .Distinct()
                   .ToArray());
        }
示例#4
0
        protected virtual void SetDependencies(List <AbpModuleDescriptor> modules, AbpModuleDescriptor module)
        {
            foreach (var dependedModuleType in AbpModuleHelper.FindDependedModuleTypes(module.Type))
            {
                var dependedModule = modules.FirstOrDefault(m => m.Type == dependedModuleType);
                if (dependedModule == null)
                {
                    throw new AbpException("Could not find a depended module " + dependedModuleType.AssemblyQualifiedName + " for " + module.Type.AssemblyQualifiedName);
                }

                module.AddDependency(dependedModule);
            }
        }
示例#5
0
        private static AbpModuleInfo CreateModuleInfo(Type type)
        {
            if (!AbpModuleHelper.IsAbpModule(type))
            {
                throw new AbpException(
                          string.Format(
                              "type {0} is not an Abp module. An Abp module must be subclass of AbpModule, must declare AbpModuleAttribute attribute and must not be abstract!",
                              type.FullName));
            }

            return(new AbpModuleInfo
            {
                Type = type,
                ModuleAttribute = ReflectionHelper.GetSingleAttribute <AbpModuleAttribute>(type),
                Instance = (IAbpModule)Activator.CreateInstance(type, new object[] {})
            });
        }