@@ -15,43 +15,52 @@ namespace DubUrl.Mapping;
15
15
16
16
public class SchemeMapperBuilder
17
17
{
18
+ private char [ ] Separators = [ '+' , ':' ] ;
19
+
18
20
private readonly record struct ProviderInfo ( string ProviderName , List < string > Aliases , Type DialectType , DriverLocatorFactory ? DriverLocatorFactory ) ;
19
21
private bool IsBuilt { get ; set ; } = false ;
20
22
21
23
private List < MapperInfo > MapperData { get ; } = new ( ) ;
22
24
23
- protected Dictionary < string , IMapper > Mappers { get ; set ; } = new ( ) ;
24
- private BaseMapperIntrospector [ ] MapperIntrospectors { get ; } = new BaseMapperIntrospector [ ] { new NativeMapperIntrospector ( ) , new WrapperMapperIntrospector ( ) } ;
25
+ protected Dictionary < string , IMapper > Mappers { get ; set ; } = [ ] ;
26
+ private BaseMapperIntrospector [ ] MapperIntrospectors { get ; } = [ new NativeMapperIntrospector ( ) , new WrapperMapperIntrospector ( ) ] ;
25
27
private DialectBuilder DialectBuilder { get ; } = new ( ) ;
26
28
27
29
public SchemeMapperBuilder ( )
28
- : this ( new [ ] { typeof ( SchemeMapperBuilder ) . Assembly } ) { }
30
+ : this ( [ typeof ( SchemeMapperBuilder ) . Assembly ] ) { }
29
31
30
32
public SchemeMapperBuilder ( Assembly [ ] assemblies )
31
33
{
32
34
var asmTypesProbe = new AssemblyTypesProbe ( assemblies ) ;
33
- MapperIntrospectors = new BaseMapperIntrospector [ ]
34
- {
35
+ MapperIntrospectors =
36
+ [
35
37
new NativeMapperIntrospector ( asmTypesProbe )
36
- , new WrapperMapperIntrospector ( asmTypesProbe )
37
- } ;
38
+ ,
39
+ new WrapperMapperIntrospector ( asmTypesProbe )
40
+ ] ;
38
41
Initialize ( ) ;
39
42
}
40
43
41
44
protected virtual void Initialize ( )
42
45
{
43
- foreach ( var mapperData
46
+ foreach ( var mapperData
44
47
in MapperIntrospectors . Aggregate (
45
48
Array . Empty < MapperInfo > ( ) , ( data , introspector )
46
49
=> data . Concat ( introspector . Locate ( ) ) . ToArray ( ) )
47
50
)
48
51
AddMapping ( mapperData ) ;
49
52
}
50
53
54
+ public bool CanHandle ( string scheme )
55
+ {
56
+ var alias = GetAlias ( scheme . Split ( Separators ) ) ;
57
+ return Mappers . ContainsKey ( alias ) ;
58
+ }
59
+
51
60
public virtual void Build ( )
52
61
{
53
62
foreach ( var mapperData in MapperData )
54
- DialectBuilder . AddAliases ( mapperData . DialectType , mapperData . Aliases . ToArray ( ) ) ;
63
+ DialectBuilder . AddAliases ( mapperData . DialectType , [ .. mapperData . Aliases ] ) ;
55
64
DialectBuilder . Build ( ) ;
56
65
57
66
Mappers . Clear ( ) ;
@@ -107,7 +116,7 @@ private static string GetAlias(string[] aliases)
107
116
}
108
117
109
118
public IMapper GetMapper ( string alias )
110
- => GetMapper ( new [ ] { alias } ) ;
119
+ => GetMapper ( alias . Split ( Separators ) ) ;
111
120
112
121
public virtual IMapper GetMapper ( string [ ] aliases )
113
122
{
0 commit comments