Ejemplo n.º 1
0
        private List <IModuleDescriptor> GetDescriptors(
            IServiceCollection services,
            Type startupModuleType,
            IPlugInSourceList plugInSources)
        {
            var modules = new List <ModuleDescriptor>();

            FillModules(modules, services, startupModuleType, plugInSources);
            SetDependencies(modules);

            return(modules.Cast <IModuleDescriptor>().ToList());
        }
Ejemplo n.º 2
0
        public IModuleDescriptor[] LoadModules(
            IServiceCollection services,
            Type startupModuleType,
            IPlugInSourceList plugInSources)
        {
            Check.NotNull(services, nameof(services));
            Check.NotNull(startupModuleType, nameof(startupModuleType));
            Check.NotNull(plugInSources, nameof(plugInSources));

            var modules = GetDescriptors(services, startupModuleType, plugInSources);

            modules = SortByDependency(modules, startupModuleType);

            return(modules.ToArray());
        }
Ejemplo n.º 3
0
        protected virtual void FillModules(
            List <ModuleDescriptor> modules,
            IServiceCollection services,
            Type startupModuleType,
            IPlugInSourceList plugInSources)
        {
            //All modules starting from the startup module
            foreach (var moduleType in ModuleHelper.FindAllModuleTypes(startupModuleType))
            {
                modules.Add(CreateModuleDescriptor(services, moduleType));
            }

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

                modules.Add(CreateModuleDescriptor(services, moduleType, isLoadedAsPlugIn: true));
            }
        }
Ejemplo n.º 4
0
 private static void Add(this IPlugInSourceList plugs, IPlugInSource plug) => (plugs as PlugInSourceList)?.Add(plug);
Ejemplo n.º 5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="plugs"></param>
 /// <param name="path"></param>
 /// <param name="predicate"></param>
 public static void AddFolder(this IPlugInSourceList plugs, string path, Func <string, bool> predicate = default) => plugs.Add(new FolderPlugInSource(plugs.As <PlugInSourceList>(), path)
 {
     Filter = predicate
 });
Ejemplo n.º 6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="plugs"></param>
 /// <param name="filePaths"></param>
 public static void AddFile(this IPlugInSourceList plugs, params string[] filePaths) => plugs.Add(new FilePlugInSource(plugs.As <PlugInSourceList>(), filePaths));
Ejemplo n.º 7
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="plugs"></param>
 /// <param name="moduleType"></param>
 public static void AddType(this IPlugInSourceList plugs, params Type[] moduleType) => plugs.Add(new TypePlugInSource(moduleType));
Ejemplo n.º 8
0
 /// <summary>
 ///
 /// </summary>
 /// <typeparam name="TModule"></typeparam>
 /// <param name="plugs"></param>
 public static void AddType <TModule>(this IPlugInSourceList plugs) where TModule : IScorpioModule => plugs.AddType(typeof(TModule));