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
+