diff --git a/src/dotnetCampus.ApplicationStartupManager/StartupManager.cs b/src/dotnetCampus.ApplicationStartupManager/StartupManager.cs index 1cea353..c42f4d5 100644 --- a/src/dotnetCampus.ApplicationStartupManager/StartupManager.cs +++ b/src/dotnetCampus.ApplicationStartupManager/StartupManager.cs @@ -16,10 +16,10 @@ namespace dotnetCampus.ApplicationStartupManager { private readonly IMainThreadDispatcher _dispatcher; - /// - /// Builder 模式所需状态:包含当前剩余需要管理的启动任务程序集。 - /// - private readonly List _assembliesToBeManaged = new List(); + ///// + ///// Builder 模式所需状态:包含当前剩余需要管理的启动任务程序集。 + ///// + //private readonly List _assembliesToBeManaged = new List(); /// /// Builder 模式所需状态:包含当前所有的关键启动任务。 @@ -77,21 +77,38 @@ namespace dotnetCampus.ApplicationStartupManager Logger.RecordTime("ManagerInitialized"); } + ///// + ///// 配置被 管理的程序集。 + ///// 只有被管理的程序集中的启动信息、依赖注入信息才会被执行。 + ///// + ///// + ///// + //public StartupManager ConfigAssemblies(IEnumerable assemblies) + //{ + // // 可能的限制尚未完成: + // // 1. Run 之后不能再调用此方法(适用于固定的程序集应用); + // // 2. 可以多次 Config 然后多次 Run(适用于动态加载的插件程序集)。 + // _assembliesToBeManaged.AddRange(assemblies); + // return this; + //} + /// /// 配置被 管理的程序集。 /// 只有被管理的程序集中的启动信息、依赖注入信息才会被执行。 /// - /// + /// /// - public StartupManager ConfigAssemblies(IEnumerable assemblies) + public StartupManager AddStartupTaskMetadataCollector(Func> collector) { // 可能的限制尚未完成: // 1. Run 之后不能再调用此方法(适用于固定的程序集应用); // 2. 可以多次 Config 然后多次 Run(适用于动态加载的插件程序集)。 - _assembliesToBeManaged.AddRange(assemblies); + _startupTaskMetadataCollectorList.Add(collector); return this; } + private readonly ConcurrentBag>> _startupTaskMetadataCollectorList = new ConcurrentBag>>(); + /// /// 在启动流程中定义一组关键的启动节点。使用此方法定义的关键启动节点将按顺序前后依次依赖。 /// 例如传入 A、B、C、D 四个关键启动节点,那么 A - B - C - D 将依次执行,其他任务将插入其中。 @@ -192,24 +209,25 @@ namespace dotnetCampus.ApplicationStartupManager return this; } - public StartupManager SelectNodes(StartupCategory categories) - { - _selectingCategories = categories; - return this; - } + // 不支持被使用 + //public StartupManager SelectNodes(StartupCategory categories) + //{ + // _selectingCategories = categories; + // return this; + //} - public StartupManager ForStartupTasksOfCategory(StartupCategory category, - Action taskBuilder) - { - _additionalBuilders.Add(builder => - { - if (builder.Categories == category) - { - taskBuilder(builder); - } - }); - return this; - } + //public StartupManager ForStartupTasksOfCategory(StartupCategory category, + // Action taskBuilder) + //{ + // _additionalBuilders.Add(builder => + // { + // if (builder.Categories == category) + // { + // taskBuilder(builder); + // } + // }); + // return this; + //} public async void Run() { @@ -254,7 +272,7 @@ namespace dotnetCampus.ApplicationStartupManager wrapper.Categories &= _selectingCategories; } - var taskMetadataList = ExportStartupTasks(_assembliesToBeManaged, _selectingCategories).ToList(); + var taskMetadataList = ExportStartupTasks().ToList(); foreach (var meta in taskMetadataList) { @@ -294,20 +312,15 @@ namespace dotnetCampus.ApplicationStartupManager return DFSGraph(wrappers); - IEnumerable ExportStartupTasks( - IEnumerable assemblies, StartupCategory categories) + IEnumerable ExportStartupTasks() { - // todo 高性能的预编译框架接入 - //foreach (var meta in AssemblyMetadataExporter.ExportStartupTasks(assemblies)) - //{ - // meta.Categories &= categories; - // if (meta.Categories != StartupCategory.None) - // { - // yield return meta; - // } - //} - - yield break; + foreach (var func in _startupTaskMetadataCollectorList) + { + foreach (var taskMetadata in func()) + { + yield return taskMetadata; + } + } } void AddDependencies(StartupTaskWrapper wrapper, string afterTasks) diff --git a/src/dotnetCampus.ApplicationStartupManager/dotnetCampus.ApplicationStartupManager.csproj b/src/dotnetCampus.ApplicationStartupManager/dotnetCampus.ApplicationStartupManager.csproj index 631975f..b9d1775 100644 --- a/src/dotnetCampus.ApplicationStartupManager/dotnetCampus.ApplicationStartupManager.csproj +++ b/src/dotnetCampus.ApplicationStartupManager/dotnetCampus.ApplicationStartupManager.csproj @@ -4,7 +4,7 @@ netcoreapp3.1;netstandard2.0;net45;net5.0 true - true +