@@ -20,40 +20,41 @@ class HandlerRegistryService {
2020
2121 static let shared = HandlerRegistryService ( )
2222
23- let dispatchQueue = DispatchQueue ( label: " com.optimizely.HandlerRegistryService " )
23+ struct ServiceKey : Hashable {
24+ var service : String
25+ var sdkKey : String ?
26+ }
2427
25- var binders = [ BinderProtocol] ( )
28+ var binders : [ ServiceKey : BinderProtocol ] = [ ServiceKey : BinderProtocol] ( )
2629
2730 private init ( ) {
2831
2932 }
3033
3134 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+ }
3941 }
4042
4143 func injectComponent( service: Any , sdkKey: String ? = nil , isReintialize: Bool = false ) -> Any ? {
4244 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
5758 }
5859 }
5960 return result
@@ -64,10 +65,9 @@ class HandlerRegistryService {
6465 }
6566
6667 func lookupComponents( sdkKey: String ) -> [ Any ? ] ? {
67- var value : [ Any ] ?
6868
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+
7171 return value
7272 }
7373}
0 commit comments