diff --git a/src/ZonyLrcTools.Cli/Config/ToolOptions.cs b/src/ZonyLrcTools.Cli/Config/ToolOptions.cs
index b256f97..22857ea 100644
--- a/src/ZonyLrcTools.Cli/Config/ToolOptions.cs
+++ b/src/ZonyLrcTools.Cli/Config/ToolOptions.cs
@@ -1,4 +1,3 @@
-using System.Collections;
using System.Collections.Generic;
using ZonyLrcTools.Cli.Infrastructure.Lyric;
using ZonyLrcTools.Cli.Infrastructure.Network;
@@ -19,9 +18,9 @@ namespace ZonyLrcTools.Cli.Config
public LyricItemCollectionOption LyricOption { get; set; }
///
- /// 标签加载器的加载配置项。
+ /// 标签加载器相关的配置属性。
///
- public TagInfoProviderOptions TagInfoProviderOptions { get; set; }
+ public IEnumerable TagInfoProviderOptions { get; set; }
///
/// 网络代理相关的配置信息。
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Tag/DefaultTagLoader.cs b/src/ZonyLrcTools.Cli/Infrastructure/Tag/DefaultTagLoader.cs
index bf3ce61..7403448 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Tag/DefaultTagLoader.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Tag/DefaultTagLoader.cs
@@ -11,7 +11,7 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag
///
/// 默认的标签加载器 实现。
///
- public class DefaultTagLoader : ITagLoader, ITransientDependency
+ public class DefaultTagLoader : ITagLoader, ISingletonDependency
{
protected readonly IEnumerable TagInfoProviders;
protected readonly IBlockWordDictionary BlockWordDictionary;
@@ -33,7 +33,7 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag
throw new ErrorCodeException(ErrorCodes.LoadTagInfoProviderError);
}
- foreach (var provider in TagInfoProviders.OrderBy(p => p.Priority))
+ foreach (var provider in TagInfoProviders)
{
var info = await provider.LoadAsync(filePath);
if (info != null)
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Tag/FileNameTagInfoProvider.cs b/src/ZonyLrcTools.Cli/Infrastructure/Tag/FileNameTagInfoProvider.cs
index fc55ebb..efe9e69 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Tag/FileNameTagInfoProvider.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Tag/FileNameTagInfoProvider.cs
@@ -1,4 +1,5 @@
using System.IO;
+using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Extensions.Options;
@@ -10,25 +11,28 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag
///
/// 基于正则表达式的标签解析器,从文件名当中解析歌曲的标签信息。
///
- public class FileNameTagInfoProvider : ITagInfoProvider, ITransientDependency
+ public class FileNameTagInfoProvider : ITagInfoProvider, ISingletonDependency
{
- public int Priority => 2;
-
public string Name => ConstantName;
public const string ConstantName = "FileName";
+ public const string RegularExpressionsOption = "RegularExpressions";
- private readonly ToolOptions Options;
+ private readonly ToolOptions _options;
public FileNameTagInfoProvider(IOptions options)
{
- Options = options.Value;
+ _options = options.Value;
}
public async ValueTask LoadAsync(string filePath)
{
await ValueTask.CompletedTask;
+
+ var regex = _options.TagInfoProviderOptions
+ .First(t => t.Name == ConstantName)
+ .Extensions[RegularExpressionsOption];
- var match = Regex.Match(Path.GetFileNameWithoutExtension(filePath), Options.TagInfoProviderOptions.FileNameRegularExpressions);
+ var match = Regex.Match(Path.GetFileNameWithoutExtension(filePath), regex);
if (match.Groups.Count != 3)
{
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Tag/ITagInfoProvider.cs b/src/ZonyLrcTools.Cli/Infrastructure/Tag/ITagInfoProvider.cs
index 85614be..e479196 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Tag/ITagInfoProvider.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Tag/ITagInfoProvider.cs
@@ -7,11 +7,6 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag
///
public interface ITagInfoProvider
{
- ///
- /// 解析时的优先级。
- ///
- int Priority { get; }
-
///
/// 标签解析器的唯一标识。
///
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Tag/TagInfoProviderOptions.cs b/src/ZonyLrcTools.Cli/Infrastructure/Tag/TagInfoProviderOptions.cs
index 4876b1a..3d16cb0 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Tag/TagInfoProviderOptions.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Tag/TagInfoProviderOptions.cs
@@ -1,10 +1,13 @@
+using System.Collections.Generic;
+
namespace ZonyLrcTools.Cli.Infrastructure.Tag
{
- public class TagInfoProviderOptions
+ public class TagInfoProviderInstance
{
- ///
- /// 用于从文件名当中提取歌曲名、歌手名。
- ///
- public string FileNameRegularExpressions { get; set; }
+ public string Name { get; set; }
+
+ public int Priority { get; set; }
+
+ public Dictionary Extensions { get; set; }
}
}
\ No newline at end of file
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Tag/TaglibTagInfoProvider.cs b/src/ZonyLrcTools.Cli/Infrastructure/Tag/TaglibTagInfoProvider.cs
index 8ceacd6..c3d18a6 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Tag/TaglibTagInfoProvider.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Tag/TaglibTagInfoProvider.cs
@@ -8,10 +8,8 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag
///
/// 基于 TagLib 的标签信息解析器。
///
- public class TaglibTagInfoProvider : ITagInfoProvider, ITransientDependency
+ public class TaglibTagInfoProvider : ITagInfoProvider, ISingletonDependency
{
- public int Priority => 1;
-
public string Name => ConstantName;
public const string ConstantName = "Taglib";
diff --git a/src/ZonyLrcTools.Cli/appsettings.json b/src/ZonyLrcTools.Cli/appsettings.json
index 0f38432..c7a2db7 100644
--- a/src/ZonyLrcTools.Cli/appsettings.json
+++ b/src/ZonyLrcTools.Cli/appsettings.json
@@ -13,9 +13,19 @@
"ProxyIp": "127.0.0.1",
"ProxyPort": 4780
},
- "TagInfoProviderOptions": {
- "FileNameRegularExpressions": "(?'artist'.+)\\s-\\s(?'name'.+)"
- },
+ "TagInfoProviderOptions": [
+ {
+ "Name": "Taglib",
+ "Priority": 1
+ },
+ {
+ "Name": "FileName",
+ "Priority": 2,
+ "Extensions": {
+ "RegularExpressions": "(?'artist'.+)\\s-\\s(?'name'.+)"
+ }
+ }
+ ],
"LyricDownloaderOptions": [
{
"Name": "NetEase",