4
4
5
5
import Swinject
6
6
7
- // This code should move into the Swinject library.
8
- // There is an open pull request to make this change https://github.com/Swinject/Swinject/pull/570
7
+ // MARK: - MainActor Registration Methods
9
8
10
- // MARK: - MainActor registration
11
- extension Container {
9
+ extension Knit . Container {
12
10
13
11
/// Adds a registration for the specified service with the factory closure to specify how the service is
14
12
/// resolved with dependencies which must be resolved on the main actor.
@@ -27,18 +25,20 @@ extension Container {
27
25
public func register< Service> (
28
26
_ serviceType: Service . Type ,
29
27
name: String ? = nil ,
30
- mainActorFactory: @escaping @MainActor ( Resolver ) -> Service
28
+ mainActorFactory: @escaping @MainActor ( TargetResolver ) -> Service
31
29
) -> ServiceEntry < Service > {
32
- return register ( serviceType, name: name) { r in
33
- MainActor . assumeIsolated {
34
- return mainActorFactory ( r)
30
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { r in
31
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
32
+ return MainActor . assumeIsolated {
33
+ return mainActorFactory ( resolver)
35
34
}
36
35
}
37
36
}
38
37
}
39
38
40
- // MARK: - MainActor registration with Arguments
41
- extension Container {
39
+ // MARK: - MainActor Registration Methods with Arguments
40
+
41
+ extension Knit . Container {
42
42
/// Adds a registration for the specified service with the factory closure to specify how the service is
43
43
/// resolved with dependencies which must be resolved on the main actor.
44
44
///
@@ -56,10 +56,11 @@ extension Container {
56
56
public func register< Service, Arg1> (
57
57
_ serviceType: Service . Type ,
58
58
name: String ? = nil ,
59
- mainActorFactory: @escaping @MainActor ( Resolver , Arg1 ) -> Service
59
+ mainActorFactory: @escaping @MainActor ( TargetResolver , Arg1 ) -> Service
60
60
) -> ServiceEntry < Service > {
61
- return register ( serviceType, name: name) { ( resolver: Resolver , arg1: Arg1 ) in
62
- MainActor . assumeIsolated {
61
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { ( r: Swinject . Resolver , arg1: Arg1 ) in
62
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
63
+ return MainActor . assumeIsolated {
63
64
return mainActorFactory ( resolver, arg1)
64
65
}
65
66
}
@@ -82,10 +83,11 @@ extension Container {
82
83
public func register< Service, Arg1, Arg2> (
83
84
_ serviceType: Service . Type ,
84
85
name: String ? = nil ,
85
- mainActorFactory: @escaping @MainActor ( Resolver , Arg1 , Arg2 ) -> Service
86
+ mainActorFactory: @escaping @MainActor ( TargetResolver , Arg1 , Arg2 ) -> Service
86
87
) -> ServiceEntry < Service > {
87
- return register ( serviceType, name: name) { ( resolver: Resolver , arg1: Arg1 , arg2: Arg2 ) in
88
- MainActor . assumeIsolated {
88
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { ( r: Swinject . Resolver , arg1: Arg1 , arg2: Arg2 ) in
89
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
90
+ return MainActor . assumeIsolated {
89
91
return mainActorFactory ( resolver, arg1, arg2)
90
92
}
91
93
}
@@ -108,10 +110,11 @@ extension Container {
108
110
public func register< Service, Arg1, Arg2, Arg3> (
109
111
_ serviceType: Service . Type ,
110
112
name: String ? = nil ,
111
- mainActorFactory: @escaping @MainActor ( Resolver , Arg1 , Arg2 , Arg3 ) -> Service
113
+ mainActorFactory: @escaping @MainActor ( TargetResolver , Arg1 , Arg2 , Arg3 ) -> Service
112
114
) -> ServiceEntry < Service > {
113
- return register ( serviceType, name: name) { ( resolver: Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 ) in
114
- MainActor . assumeIsolated {
115
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { ( r: Swinject . Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 ) in
116
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
117
+ return MainActor . assumeIsolated {
115
118
return mainActorFactory ( resolver, arg1, arg2, arg3)
116
119
}
117
120
}
@@ -134,10 +137,11 @@ extension Container {
134
137
public func register< Service, Arg1, Arg2, Arg3, Arg4> (
135
138
_ serviceType: Service . Type ,
136
139
name: String ? = nil ,
137
- mainActorFactory: @escaping @MainActor ( Resolver , Arg1 , Arg2 , Arg3 , Arg4 ) -> Service
140
+ mainActorFactory: @escaping @MainActor ( TargetResolver , Arg1 , Arg2 , Arg3 , Arg4 ) -> Service
138
141
) -> ServiceEntry < Service > {
139
- return register ( serviceType, name: name) { ( resolver: Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 ) in
140
- MainActor . assumeIsolated {
142
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { ( r: Swinject . Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 ) in
143
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
144
+ return MainActor . assumeIsolated {
141
145
return mainActorFactory ( resolver, arg1, arg2, arg3, arg4)
142
146
}
143
147
}
@@ -160,10 +164,11 @@ extension Container {
160
164
public func register< Service, Arg1, Arg2, Arg3, Arg4, Arg5> (
161
165
_ serviceType: Service . Type ,
162
166
name: String ? = nil ,
163
- mainActorFactory: @escaping @MainActor ( Resolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 ) -> Service
167
+ mainActorFactory: @escaping @MainActor ( TargetResolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 ) -> Service
164
168
) -> ServiceEntry < Service > {
165
- return register ( serviceType, name: name) { ( resolver: Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 ) in
166
- MainActor . assumeIsolated {
169
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { ( r: Swinject . Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 ) in
170
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
171
+ return MainActor . assumeIsolated {
167
172
return mainActorFactory ( resolver, arg1, arg2, arg3, arg4, arg5)
168
173
}
169
174
}
@@ -186,10 +191,11 @@ extension Container {
186
191
public func register< Service, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> (
187
192
_ serviceType: Service . Type ,
188
193
name: String ? = nil ,
189
- mainActorFactory: @escaping @MainActor ( Resolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 ) -> Service
194
+ mainActorFactory: @escaping @MainActor ( TargetResolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 ) -> Service
190
195
) -> ServiceEntry < Service > {
191
- return register ( serviceType, name: name) { ( resolver: Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 , arg6: Arg6 ) in
192
- MainActor . assumeIsolated {
196
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { ( r: Swinject . Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 , arg6: Arg6 ) in
197
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
198
+ return MainActor . assumeIsolated {
193
199
return mainActorFactory ( resolver, arg1, arg2, arg3, arg4, arg5, arg6)
194
200
}
195
201
}
@@ -212,10 +218,11 @@ extension Container {
212
218
public func register< Service, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> (
213
219
_ serviceType: Service . Type ,
214
220
name: String ? = nil ,
215
- mainActorFactory: @escaping @MainActor ( Resolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 ) -> Service
221
+ mainActorFactory: @escaping @MainActor ( TargetResolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 ) -> Service
216
222
) -> ServiceEntry < Service > {
217
- return register ( serviceType, name: name) { ( resolver: Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 , arg6: Arg6 , arg7: Arg7 ) in
218
- MainActor . assumeIsolated {
223
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { ( r: Swinject . Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 , arg6: Arg6 , arg7: Arg7 ) in
224
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
225
+ return MainActor . assumeIsolated {
219
226
return mainActorFactory ( resolver, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
220
227
}
221
228
}
@@ -238,10 +245,11 @@ extension Container {
238
245
public func register< Service, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8> (
239
246
_ serviceType: Service . Type ,
240
247
name: String ? = nil ,
241
- mainActorFactory: @escaping @MainActor ( Resolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 ) -> Service
248
+ mainActorFactory: @escaping @MainActor ( TargetResolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 ) -> Service
242
249
) -> ServiceEntry < Service > {
243
- return register ( serviceType, name: name) { ( resolver: Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 , arg6: Arg6 , arg7: Arg7 , arg8: Arg8 ) in
244
- MainActor . assumeIsolated {
250
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { ( r: Swinject . Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 , arg6: Arg6 , arg7: Arg7 , arg8: Arg8 ) in
251
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
252
+ return MainActor . assumeIsolated {
245
253
return mainActorFactory ( resolver, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
246
254
}
247
255
}
@@ -264,10 +272,11 @@ extension Container {
264
272
public func register< Service, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9> (
265
273
_ serviceType: Service . Type ,
266
274
name: String ? = nil ,
267
- mainActorFactory: @escaping @MainActor ( Resolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9 ) -> Service
275
+ mainActorFactory: @escaping @MainActor ( TargetResolver , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9 ) -> Service
268
276
) -> ServiceEntry < Service > {
269
- return register ( serviceType, name: name) { ( resolver: Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 , arg6: Arg6 , arg7: Arg7 , arg8: Arg8 , arg9: Arg9 ) in
270
- MainActor . assumeIsolated {
277
+ return _unwrappedSwinjectContainer. register ( serviceType, name: name) { ( r: Swinject . Resolver , arg1: Arg1 , arg2: Arg2 , arg3: Arg3 , arg4: Arg4 , arg5: Arg5 , arg6: Arg6 , arg7: Arg7 , arg8: Arg8 , arg9: Arg9 ) in
278
+ let resolver = r. resolve ( Container< TargetResolver> . self ) !. resolver
279
+ return MainActor . assumeIsolated {
271
280
return mainActorFactory ( resolver, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
272
281
}
273
282
}
0 commit comments