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()); }
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()); }
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)); } }
private static void Add(this IPlugInSourceList plugs, IPlugInSource plug) => (plugs as PlugInSourceList)?.Add(plug);
/// <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 });
/// <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));
/// <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));
/// <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));