@@ -20,40 +20,41 @@ class HandlerRegistryService {
20
20
21
21
static let shared = HandlerRegistryService ( )
22
22
23
- let dispatchQueue = DispatchQueue ( label: " com.optimizely.HandlerRegistryService " )
23
+ struct ServiceKey : Hashable {
24
+ var service : String
25
+ var sdkKey : String ?
26
+ }
24
27
25
- var binders = [ BinderProtocol] ( )
28
+ var binders : [ ServiceKey : BinderProtocol ] = [ ServiceKey : BinderProtocol] ( )
26
29
27
30
private init ( ) {
28
31
29
32
}
30
33
31
34
func registerBinding( binder: BinderProtocol ) {
32
- dispatchQueue. sync {
33
- if let _ = binders. filter ( { ( type ( of: $0. service) == type ( of: binder. service) ) && $0. sdkKey == binder. sdkKey} ) . first {
34
- }
35
- else {
36
- binders. append ( binder)
37
- }
38
- }
35
+ let sk = ServiceKey ( service: " \( type ( of: binder. service) ) " , sdkKey: binder. sdkKey)
36
+ if let _ = binders [ sk] {
37
+ }
38
+ else {
39
+ binders [ sk] = binder
40
+ }
39
41
}
40
42
41
43
func injectComponent( service: Any , sdkKey: String ? = nil , isReintialize: Bool = false ) -> Any ? {
42
44
var result : Any ?
43
- dispatchQueue. sync {
44
- if var binder = binders. filter ( { ( type ( of: $0. service) == type ( of: service) ) && $0. sdkKey == sdkKey} ) . first {
45
- if isReintialize && binder. strategy == . reCreate {
46
- binder. instance = binder. factory ( )
47
- result = binder. instance
48
- }
49
- else if let inst = binder. instance, binder. isSingleton {
50
- result = inst
51
- }
52
- else {
53
- let inst = binder. factory ( )
54
- binder. instance = inst
55
- result = inst
56
- }
45
+ let sk = ServiceKey ( service: " \( type ( of: service) ) " , sdkKey: sdkKey)
46
+ if var binder = binders [ sk] {
47
+ if isReintialize && binder. strategy == . reCreate {
48
+ binder. instance = binder. factory ( )
49
+ result = binder. instance
50
+ }
51
+ else if let inst = binder. instance, binder. isSingleton {
52
+ result = inst
53
+ }
54
+ else {
55
+ let inst = binder. factory ( )
56
+ binder. instance = inst
57
+ result = inst
57
58
}
58
59
}
59
60
return result
@@ -64,10 +65,9 @@ class HandlerRegistryService {
64
65
}
65
66
66
67
func lookupComponents( sdkKey: String ) -> [ Any ? ] ? {
67
- var value : [ Any ] ?
68
68
69
- value = self . binders. filter ( { $0. sdkKey == sdkKey} ) . map ( { self . injectComponent ( service: $0 . service) as Any } )
70
-
69
+ let value = self . binders. keys . filter ( { $0. sdkKey == sdkKey} ) . map ( { self . injectComponent ( service: self . binders [ $0 ] ! . service) ! } )
70
+
71
71
return value
72
72
}
73
73
}
0 commit comments