You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1691 lines
126 KiB

2 years ago
  1. //
  2. // Sources/AutoRegistration.swift
  3. // SwinjectAutoregistration
  4. //
  5. // Generated by Swinject AutoRegistration generator.
  6. // Copyright © 2017 Swinject Contributors. All rights reserved.
  7. //
  8. import Swinject
  9. let maxDependencies = 20
  10. let maxArguments = 3
  11. public extension Container {
  12. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  13. Usage: `autoregister(MyService.self), initializer: MyService.init`
  14. - Parameters:
  15. - service: Registered service type
  16. - name: Optional name of the service
  17. - initializer: Initializer of the registered service
  18. - Returns: The registered service entry
  19. - Important: Might fail if one of the dependencies is unresolvable.
  20. */
  21. @discardableResult
  22. func autoregister<Service>(_ service: Service.Type, name: String? = nil, initializer: @escaping (()) -> Service) -> ServiceEntry<Service> {
  23. return self.register(service.self, name: name, factory: { res in
  24. initializer(())
  25. } as (Resolver) -> Service)
  26. }
  27. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  28. Usage: `autoregister(MyService.self), initializer: MyService.init`
  29. - Parameters:
  30. - service: Registered service type
  31. - name: Optional name of the service
  32. - initializer: Initializer of the registered service
  33. - Returns: The registered service entry
  34. - Important: Might fail if one of the dependencies is unresolvable.
  35. */
  36. @discardableResult
  37. func autoregister<Service, A>(_ service: Service.Type, name: String? = nil, initializer: @escaping (A) -> Service) -> ServiceEntry<Service> {
  38. return self.register(service.self, name: name, factory: { res in
  39. let a: A? = res.resolve()
  40. checkResolved(initializer: initializer, services: a)
  41. return initializer(a!)
  42. } as (Resolver) -> Service)
  43. }
  44. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  45. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  46. - Parameters:
  47. - service: Registered service type
  48. - name: Optional name of the service
  49. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  50. - initializer: Initializer of the registered service
  51. - Returns: The registered service entry with 1 arguments
  52. - Important: Might fail if one of the dependencies is unresolvable.
  53. */
  54. @discardableResult
  55. func autoregister<Service, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping (Arg1) -> Service) -> ServiceEntry<Service> {
  56. return self.register(service.self, name: name, factory: { res, arg1 in
  57. let arg1: Arg1? = arg1
  58. checkResolved(initializer: initializer, services: arg1)
  59. return initializer(arg1!)
  60. } as (Resolver, Arg1) -> Service)
  61. }
  62. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  63. Usage: `autoregister(MyService.self), initializer: MyService.init`
  64. - Parameters:
  65. - service: Registered service type
  66. - name: Optional name of the service
  67. - initializer: Initializer of the registered service
  68. - Returns: The registered service entry
  69. - Important: Might fail if one of the dependencies is unresolvable.
  70. */
  71. @discardableResult
  72. func autoregister<Service, A, B>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B)) -> Service) -> ServiceEntry<Service> {
  73. return self.register(service.self, name: name, factory: { res in
  74. let a: A? = res.resolve(); let b: B? = res.resolve()
  75. checkResolved(initializer: initializer, services: a, b)
  76. return initializer((a!, b!))
  77. } as (Resolver) -> Service)
  78. }
  79. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  80. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  81. - Parameters:
  82. - service: Registered service type
  83. - name: Optional name of the service
  84. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  85. - initializer: Initializer of the registered service
  86. - Returns: The registered service entry with 1 arguments
  87. - Important: Might fail if one of the dependencies is unresolvable.
  88. */
  89. @discardableResult
  90. func autoregister<Service, A, B, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B)) -> Service) -> ServiceEntry<Service> {
  91. return self.register(service.self, name: name, factory: { res, arg1 in
  92. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1)
  93. checkResolved(initializer: initializer, services: a, b)
  94. return initializer((a!, b!))
  95. } as (Resolver, Arg1) -> Service)
  96. }
  97. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  98. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  99. - Parameters:
  100. - service: Registered service type
  101. - name: Optional name of the service
  102. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  103. - initializer: Initializer of the registered service
  104. - Returns: The registered service entry with 2 arguments
  105. - Important: Might fail if one of the dependencies is unresolvable.
  106. */
  107. @discardableResult
  108. func autoregister<Service, A, B, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B)) -> Service) -> ServiceEntry<Service> {
  109. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  110. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  111. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2)
  112. checkResolved(initializer: initializer, services: a, b)
  113. return initializer((a!, b!))
  114. } as (Resolver, Arg1, Arg2) -> Service)
  115. }
  116. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  117. Usage: `autoregister(MyService.self), initializer: MyService.init`
  118. - Parameters:
  119. - service: Registered service type
  120. - name: Optional name of the service
  121. - initializer: Initializer of the registered service
  122. - Returns: The registered service entry
  123. - Important: Might fail if one of the dependencies is unresolvable.
  124. */
  125. @discardableResult
  126. func autoregister<Service, A, B, C>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C)) -> Service) -> ServiceEntry<Service> {
  127. return self.register(service.self, name: name, factory: { res in
  128. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve()
  129. checkResolved(initializer: initializer, services: a, b, c)
  130. return initializer((a!, b!, c!))
  131. } as (Resolver) -> Service)
  132. }
  133. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  134. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  135. - Parameters:
  136. - service: Registered service type
  137. - name: Optional name of the service
  138. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  139. - initializer: Initializer of the registered service
  140. - Returns: The registered service entry with 1 arguments
  141. - Important: Might fail if one of the dependencies is unresolvable.
  142. */
  143. @discardableResult
  144. func autoregister<Service, A, B, C, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C)) -> Service) -> ServiceEntry<Service> {
  145. return self.register(service.self, name: name, factory: { res, arg1 in
  146. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1)
  147. checkResolved(initializer: initializer, services: a, b, c)
  148. return initializer((a!, b!, c!))
  149. } as (Resolver, Arg1) -> Service)
  150. }
  151. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  152. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  153. - Parameters:
  154. - service: Registered service type
  155. - name: Optional name of the service
  156. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  157. - initializer: Initializer of the registered service
  158. - Returns: The registered service entry with 2 arguments
  159. - Important: Might fail if one of the dependencies is unresolvable.
  160. */
  161. @discardableResult
  162. func autoregister<Service, A, B, C, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C)) -> Service) -> ServiceEntry<Service> {
  163. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  164. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  165. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2)
  166. checkResolved(initializer: initializer, services: a, b, c)
  167. return initializer((a!, b!, c!))
  168. } as (Resolver, Arg1, Arg2) -> Service)
  169. }
  170. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  171. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  172. - Parameters:
  173. - service: Registered service type
  174. - name: Optional name of the service
  175. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  176. - initializer: Initializer of the registered service
  177. - Returns: The registered service entry with 3 arguments
  178. - Important: Might fail if one of the dependencies is unresolvable.
  179. */
  180. @discardableResult
  181. func autoregister<Service, A, B, C, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C)) -> Service) -> ServiceEntry<Service> {
  182. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  183. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  184. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3)
  185. checkResolved(initializer: initializer, services: a, b, c)
  186. return initializer((a!, b!, c!))
  187. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  188. }
  189. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  190. Usage: `autoregister(MyService.self), initializer: MyService.init`
  191. - Parameters:
  192. - service: Registered service type
  193. - name: Optional name of the service
  194. - initializer: Initializer of the registered service
  195. - Returns: The registered service entry
  196. - Important: Might fail if one of the dependencies is unresolvable.
  197. */
  198. @discardableResult
  199. func autoregister<Service, A, B, C, D>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D)) -> Service) -> ServiceEntry<Service> {
  200. return self.register(service.self, name: name, factory: { res in
  201. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve()
  202. checkResolved(initializer: initializer, services: a, b, c, d)
  203. return initializer((a!, b!, c!, d!))
  204. } as (Resolver) -> Service)
  205. }
  206. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  207. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  208. - Parameters:
  209. - service: Registered service type
  210. - name: Optional name of the service
  211. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  212. - initializer: Initializer of the registered service
  213. - Returns: The registered service entry with 1 arguments
  214. - Important: Might fail if one of the dependencies is unresolvable.
  215. */
  216. @discardableResult
  217. func autoregister<Service, A, B, C, D, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D)) -> Service) -> ServiceEntry<Service> {
  218. return self.register(service.self, name: name, factory: { res, arg1 in
  219. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1)
  220. checkResolved(initializer: initializer, services: a, b, c, d)
  221. return initializer((a!, b!, c!, d!))
  222. } as (Resolver, Arg1) -> Service)
  223. }
  224. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  225. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  226. - Parameters:
  227. - service: Registered service type
  228. - name: Optional name of the service
  229. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  230. - initializer: Initializer of the registered service
  231. - Returns: The registered service entry with 2 arguments
  232. - Important: Might fail if one of the dependencies is unresolvable.
  233. */
  234. @discardableResult
  235. func autoregister<Service, A, B, C, D, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D)) -> Service) -> ServiceEntry<Service> {
  236. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  237. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  238. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2)
  239. checkResolved(initializer: initializer, services: a, b, c, d)
  240. return initializer((a!, b!, c!, d!))
  241. } as (Resolver, Arg1, Arg2) -> Service)
  242. }
  243. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  244. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  245. - Parameters:
  246. - service: Registered service type
  247. - name: Optional name of the service
  248. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  249. - initializer: Initializer of the registered service
  250. - Returns: The registered service entry with 3 arguments
  251. - Important: Might fail if one of the dependencies is unresolvable.
  252. */
  253. @discardableResult
  254. func autoregister<Service, A, B, C, D, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D)) -> Service) -> ServiceEntry<Service> {
  255. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  256. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  257. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3)
  258. checkResolved(initializer: initializer, services: a, b, c, d)
  259. return initializer((a!, b!, c!, d!))
  260. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  261. }
  262. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  263. Usage: `autoregister(MyService.self), initializer: MyService.init`
  264. - Parameters:
  265. - service: Registered service type
  266. - name: Optional name of the service
  267. - initializer: Initializer of the registered service
  268. - Returns: The registered service entry
  269. - Important: Might fail if one of the dependencies is unresolvable.
  270. */
  271. @discardableResult
  272. func autoregister<Service, A, B, C, D, E>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E)) -> Service) -> ServiceEntry<Service> {
  273. return self.register(service.self, name: name, factory: { res in
  274. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve()
  275. checkResolved(initializer: initializer, services: a, b, c, d, e)
  276. return initializer((a!, b!, c!, d!, e!))
  277. } as (Resolver) -> Service)
  278. }
  279. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  280. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  281. - Parameters:
  282. - service: Registered service type
  283. - name: Optional name of the service
  284. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  285. - initializer: Initializer of the registered service
  286. - Returns: The registered service entry with 1 arguments
  287. - Important: Might fail if one of the dependencies is unresolvable.
  288. */
  289. @discardableResult
  290. func autoregister<Service, A, B, C, D, E, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E)) -> Service) -> ServiceEntry<Service> {
  291. return self.register(service.self, name: name, factory: { res, arg1 in
  292. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1)
  293. checkResolved(initializer: initializer, services: a, b, c, d, e)
  294. return initializer((a!, b!, c!, d!, e!))
  295. } as (Resolver, Arg1) -> Service)
  296. }
  297. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  298. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  299. - Parameters:
  300. - service: Registered service type
  301. - name: Optional name of the service
  302. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  303. - initializer: Initializer of the registered service
  304. - Returns: The registered service entry with 2 arguments
  305. - Important: Might fail if one of the dependencies is unresolvable.
  306. */
  307. @discardableResult
  308. func autoregister<Service, A, B, C, D, E, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E)) -> Service) -> ServiceEntry<Service> {
  309. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  310. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  311. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2)
  312. checkResolved(initializer: initializer, services: a, b, c, d, e)
  313. return initializer((a!, b!, c!, d!, e!))
  314. } as (Resolver, Arg1, Arg2) -> Service)
  315. }
  316. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  317. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  318. - Parameters:
  319. - service: Registered service type
  320. - name: Optional name of the service
  321. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  322. - initializer: Initializer of the registered service
  323. - Returns: The registered service entry with 3 arguments
  324. - Important: Might fail if one of the dependencies is unresolvable.
  325. */
  326. @discardableResult
  327. func autoregister<Service, A, B, C, D, E, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E)) -> Service) -> ServiceEntry<Service> {
  328. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  329. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  330. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3)
  331. checkResolved(initializer: initializer, services: a, b, c, d, e)
  332. return initializer((a!, b!, c!, d!, e!))
  333. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  334. }
  335. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  336. Usage: `autoregister(MyService.self), initializer: MyService.init`
  337. - Parameters:
  338. - service: Registered service type
  339. - name: Optional name of the service
  340. - initializer: Initializer of the registered service
  341. - Returns: The registered service entry
  342. - Important: Might fail if one of the dependencies is unresolvable.
  343. */
  344. @discardableResult
  345. func autoregister<Service, A, B, C, D, E, F>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F)) -> Service) -> ServiceEntry<Service> {
  346. return self.register(service.self, name: name, factory: { res in
  347. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve()
  348. checkResolved(initializer: initializer, services: a, b, c, d, e, f)
  349. return initializer((a!, b!, c!, d!, e!, f!))
  350. } as (Resolver) -> Service)
  351. }
  352. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  353. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  354. - Parameters:
  355. - service: Registered service type
  356. - name: Optional name of the service
  357. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  358. - initializer: Initializer of the registered service
  359. - Returns: The registered service entry with 1 arguments
  360. - Important: Might fail if one of the dependencies is unresolvable.
  361. */
  362. @discardableResult
  363. func autoregister<Service, A, B, C, D, E, F, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F)) -> Service) -> ServiceEntry<Service> {
  364. return self.register(service.self, name: name, factory: { res, arg1 in
  365. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1)
  366. checkResolved(initializer: initializer, services: a, b, c, d, e, f)
  367. return initializer((a!, b!, c!, d!, e!, f!))
  368. } as (Resolver, Arg1) -> Service)
  369. }
  370. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  371. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  372. - Parameters:
  373. - service: Registered service type
  374. - name: Optional name of the service
  375. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  376. - initializer: Initializer of the registered service
  377. - Returns: The registered service entry with 2 arguments
  378. - Important: Might fail if one of the dependencies is unresolvable.
  379. */
  380. @discardableResult
  381. func autoregister<Service, A, B, C, D, E, F, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F)) -> Service) -> ServiceEntry<Service> {
  382. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  383. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  384. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2)
  385. checkResolved(initializer: initializer, services: a, b, c, d, e, f)
  386. return initializer((a!, b!, c!, d!, e!, f!))
  387. } as (Resolver, Arg1, Arg2) -> Service)
  388. }
  389. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  390. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  391. - Parameters:
  392. - service: Registered service type
  393. - name: Optional name of the service
  394. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  395. - initializer: Initializer of the registered service
  396. - Returns: The registered service entry with 3 arguments
  397. - Important: Might fail if one of the dependencies is unresolvable.
  398. */
  399. @discardableResult
  400. func autoregister<Service, A, B, C, D, E, F, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F)) -> Service) -> ServiceEntry<Service> {
  401. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  402. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  403. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3)
  404. checkResolved(initializer: initializer, services: a, b, c, d, e, f)
  405. return initializer((a!, b!, c!, d!, e!, f!))
  406. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  407. }
  408. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  409. Usage: `autoregister(MyService.self), initializer: MyService.init`
  410. - Parameters:
  411. - service: Registered service type
  412. - name: Optional name of the service
  413. - initializer: Initializer of the registered service
  414. - Returns: The registered service entry
  415. - Important: Might fail if one of the dependencies is unresolvable.
  416. */
  417. @discardableResult
  418. func autoregister<Service, A, B, C, D, E, F, G>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G)) -> Service) -> ServiceEntry<Service> {
  419. return self.register(service.self, name: name, factory: { res in
  420. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve()
  421. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g)
  422. return initializer((a!, b!, c!, d!, e!, f!, g!))
  423. } as (Resolver) -> Service)
  424. }
  425. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  426. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  427. - Parameters:
  428. - service: Registered service type
  429. - name: Optional name of the service
  430. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  431. - initializer: Initializer of the registered service
  432. - Returns: The registered service entry with 1 arguments
  433. - Important: Might fail if one of the dependencies is unresolvable.
  434. */
  435. @discardableResult
  436. func autoregister<Service, A, B, C, D, E, F, G, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G)) -> Service) -> ServiceEntry<Service> {
  437. return self.register(service.self, name: name, factory: { res, arg1 in
  438. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1)
  439. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g)
  440. return initializer((a!, b!, c!, d!, e!, f!, g!))
  441. } as (Resolver, Arg1) -> Service)
  442. }
  443. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  444. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  445. - Parameters:
  446. - service: Registered service type
  447. - name: Optional name of the service
  448. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  449. - initializer: Initializer of the registered service
  450. - Returns: The registered service entry with 2 arguments
  451. - Important: Might fail if one of the dependencies is unresolvable.
  452. */
  453. @discardableResult
  454. func autoregister<Service, A, B, C, D, E, F, G, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G)) -> Service) -> ServiceEntry<Service> {
  455. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  456. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  457. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2)
  458. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g)
  459. return initializer((a!, b!, c!, d!, e!, f!, g!))
  460. } as (Resolver, Arg1, Arg2) -> Service)
  461. }
  462. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  463. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  464. - Parameters:
  465. - service: Registered service type
  466. - name: Optional name of the service
  467. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  468. - initializer: Initializer of the registered service
  469. - Returns: The registered service entry with 3 arguments
  470. - Important: Might fail if one of the dependencies is unresolvable.
  471. */
  472. @discardableResult
  473. func autoregister<Service, A, B, C, D, E, F, G, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G)) -> Service) -> ServiceEntry<Service> {
  474. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  475. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  476. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3)
  477. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g)
  478. return initializer((a!, b!, c!, d!, e!, f!, g!))
  479. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  480. }
  481. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  482. Usage: `autoregister(MyService.self), initializer: MyService.init`
  483. - Parameters:
  484. - service: Registered service type
  485. - name: Optional name of the service
  486. - initializer: Initializer of the registered service
  487. - Returns: The registered service entry
  488. - Important: Might fail if one of the dependencies is unresolvable.
  489. */
  490. @discardableResult
  491. func autoregister<Service, A, B, C, D, E, F, G, H>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H)) -> Service) -> ServiceEntry<Service> {
  492. return self.register(service.self, name: name, factory: { res in
  493. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve()
  494. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h)
  495. return initializer((a!, b!, c!, d!, e!, f!, g!, h!))
  496. } as (Resolver) -> Service)
  497. }
  498. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  499. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  500. - Parameters:
  501. - service: Registered service type
  502. - name: Optional name of the service
  503. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  504. - initializer: Initializer of the registered service
  505. - Returns: The registered service entry with 1 arguments
  506. - Important: Might fail if one of the dependencies is unresolvable.
  507. */
  508. @discardableResult
  509. func autoregister<Service, A, B, C, D, E, F, G, H, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H)) -> Service) -> ServiceEntry<Service> {
  510. return self.register(service.self, name: name, factory: { res, arg1 in
  511. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1)
  512. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h)
  513. return initializer((a!, b!, c!, d!, e!, f!, g!, h!))
  514. } as (Resolver, Arg1) -> Service)
  515. }
  516. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  517. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  518. - Parameters:
  519. - service: Registered service type
  520. - name: Optional name of the service
  521. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  522. - initializer: Initializer of the registered service
  523. - Returns: The registered service entry with 2 arguments
  524. - Important: Might fail if one of the dependencies is unresolvable.
  525. */
  526. @discardableResult
  527. func autoregister<Service, A, B, C, D, E, F, G, H, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H)) -> Service) -> ServiceEntry<Service> {
  528. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  529. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  530. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2)
  531. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h)
  532. return initializer((a!, b!, c!, d!, e!, f!, g!, h!))
  533. } as (Resolver, Arg1, Arg2) -> Service)
  534. }
  535. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  536. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  537. - Parameters:
  538. - service: Registered service type
  539. - name: Optional name of the service
  540. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  541. - initializer: Initializer of the registered service
  542. - Returns: The registered service entry with 3 arguments
  543. - Important: Might fail if one of the dependencies is unresolvable.
  544. */
  545. @discardableResult
  546. func autoregister<Service, A, B, C, D, E, F, G, H, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H)) -> Service) -> ServiceEntry<Service> {
  547. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  548. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  549. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3)
  550. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h)
  551. return initializer((a!, b!, c!, d!, e!, f!, g!, h!))
  552. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  553. }
  554. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  555. Usage: `autoregister(MyService.self), initializer: MyService.init`
  556. - Parameters:
  557. - service: Registered service type
  558. - name: Optional name of the service
  559. - initializer: Initializer of the registered service
  560. - Returns: The registered service entry
  561. - Important: Might fail if one of the dependencies is unresolvable.
  562. */
  563. @discardableResult
  564. func autoregister<Service, A, B, C, D, E, F, G, H, I>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I)) -> Service) -> ServiceEntry<Service> {
  565. return self.register(service.self, name: name, factory: { res in
  566. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve()
  567. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i)
  568. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!))
  569. } as (Resolver) -> Service)
  570. }
  571. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  572. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  573. - Parameters:
  574. - service: Registered service type
  575. - name: Optional name of the service
  576. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  577. - initializer: Initializer of the registered service
  578. - Returns: The registered service entry with 1 arguments
  579. - Important: Might fail if one of the dependencies is unresolvable.
  580. */
  581. @discardableResult
  582. func autoregister<Service, A, B, C, D, E, F, G, H, I, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I)) -> Service) -> ServiceEntry<Service> {
  583. return self.register(service.self, name: name, factory: { res, arg1 in
  584. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1)
  585. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i)
  586. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!))
  587. } as (Resolver, Arg1) -> Service)
  588. }
  589. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  590. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  591. - Parameters:
  592. - service: Registered service type
  593. - name: Optional name of the service
  594. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  595. - initializer: Initializer of the registered service
  596. - Returns: The registered service entry with 2 arguments
  597. - Important: Might fail if one of the dependencies is unresolvable.
  598. */
  599. @discardableResult
  600. func autoregister<Service, A, B, C, D, E, F, G, H, I, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I)) -> Service) -> ServiceEntry<Service> {
  601. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  602. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  603. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2)
  604. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i)
  605. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!))
  606. } as (Resolver, Arg1, Arg2) -> Service)
  607. }
  608. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  609. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  610. - Parameters:
  611. - service: Registered service type
  612. - name: Optional name of the service
  613. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  614. - initializer: Initializer of the registered service
  615. - Returns: The registered service entry with 3 arguments
  616. - Important: Might fail if one of the dependencies is unresolvable.
  617. */
  618. @discardableResult
  619. func autoregister<Service, A, B, C, D, E, F, G, H, I, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I)) -> Service) -> ServiceEntry<Service> {
  620. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  621. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  622. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3)
  623. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i)
  624. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!))
  625. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  626. }
  627. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  628. Usage: `autoregister(MyService.self), initializer: MyService.init`
  629. - Parameters:
  630. - service: Registered service type
  631. - name: Optional name of the service
  632. - initializer: Initializer of the registered service
  633. - Returns: The registered service entry
  634. - Important: Might fail if one of the dependencies is unresolvable.
  635. */
  636. @discardableResult
  637. func autoregister<Service, A, B, C, D, E, F, G, H, I, J>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J)) -> Service) -> ServiceEntry<Service> {
  638. return self.register(service.self, name: name, factory: { res in
  639. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve()
  640. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j)
  641. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!))
  642. } as (Resolver) -> Service)
  643. }
  644. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  645. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  646. - Parameters:
  647. - service: Registered service type
  648. - name: Optional name of the service
  649. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  650. - initializer: Initializer of the registered service
  651. - Returns: The registered service entry with 1 arguments
  652. - Important: Might fail if one of the dependencies is unresolvable.
  653. */
  654. @discardableResult
  655. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J)) -> Service) -> ServiceEntry<Service> {
  656. return self.register(service.self, name: name, factory: { res, arg1 in
  657. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1)
  658. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j)
  659. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!))
  660. } as (Resolver, Arg1) -> Service)
  661. }
  662. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  663. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  664. - Parameters:
  665. - service: Registered service type
  666. - name: Optional name of the service
  667. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  668. - initializer: Initializer of the registered service
  669. - Returns: The registered service entry with 2 arguments
  670. - Important: Might fail if one of the dependencies is unresolvable.
  671. */
  672. @discardableResult
  673. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J)) -> Service) -> ServiceEntry<Service> {
  674. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  675. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  676. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2)
  677. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j)
  678. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!))
  679. } as (Resolver, Arg1, Arg2) -> Service)
  680. }
  681. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  682. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  683. - Parameters:
  684. - service: Registered service type
  685. - name: Optional name of the service
  686. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  687. - initializer: Initializer of the registered service
  688. - Returns: The registered service entry with 3 arguments
  689. - Important: Might fail if one of the dependencies is unresolvable.
  690. */
  691. @discardableResult
  692. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J)) -> Service) -> ServiceEntry<Service> {
  693. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  694. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  695. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3)
  696. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j)
  697. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!))
  698. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  699. }
  700. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  701. Usage: `autoregister(MyService.self), initializer: MyService.init`
  702. - Parameters:
  703. - service: Registered service type
  704. - name: Optional name of the service
  705. - initializer: Initializer of the registered service
  706. - Returns: The registered service entry
  707. - Important: Might fail if one of the dependencies is unresolvable.
  708. */
  709. @discardableResult
  710. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K)) -> Service) -> ServiceEntry<Service> {
  711. return self.register(service.self, name: name, factory: { res in
  712. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve()
  713. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k)
  714. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!))
  715. } as (Resolver) -> Service)
  716. }
  717. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  718. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  719. - Parameters:
  720. - service: Registered service type
  721. - name: Optional name of the service
  722. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  723. - initializer: Initializer of the registered service
  724. - Returns: The registered service entry with 1 arguments
  725. - Important: Might fail if one of the dependencies is unresolvable.
  726. */
  727. @discardableResult
  728. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K)) -> Service) -> ServiceEntry<Service> {
  729. return self.register(service.self, name: name, factory: { res, arg1 in
  730. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1)
  731. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k)
  732. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!))
  733. } as (Resolver, Arg1) -> Service)
  734. }
  735. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  736. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  737. - Parameters:
  738. - service: Registered service type
  739. - name: Optional name of the service
  740. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  741. - initializer: Initializer of the registered service
  742. - Returns: The registered service entry with 2 arguments
  743. - Important: Might fail if one of the dependencies is unresolvable.
  744. */
  745. @discardableResult
  746. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K)) -> Service) -> ServiceEntry<Service> {
  747. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  748. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  749. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2)
  750. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k)
  751. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!))
  752. } as (Resolver, Arg1, Arg2) -> Service)
  753. }
  754. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  755. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  756. - Parameters:
  757. - service: Registered service type
  758. - name: Optional name of the service
  759. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  760. - initializer: Initializer of the registered service
  761. - Returns: The registered service entry with 3 arguments
  762. - Important: Might fail if one of the dependencies is unresolvable.
  763. */
  764. @discardableResult
  765. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K)) -> Service) -> ServiceEntry<Service> {
  766. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  767. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  768. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3)
  769. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k)
  770. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!))
  771. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  772. }
  773. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  774. Usage: `autoregister(MyService.self), initializer: MyService.init`
  775. - Parameters:
  776. - service: Registered service type
  777. - name: Optional name of the service
  778. - initializer: Initializer of the registered service
  779. - Returns: The registered service entry
  780. - Important: Might fail if one of the dependencies is unresolvable.
  781. */
  782. @discardableResult
  783. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L)) -> Service) -> ServiceEntry<Service> {
  784. return self.register(service.self, name: name, factory: { res in
  785. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve(); let l: L? = res.resolve()
  786. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l)
  787. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!))
  788. } as (Resolver) -> Service)
  789. }
  790. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  791. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  792. - Parameters:
  793. - service: Registered service type
  794. - name: Optional name of the service
  795. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  796. - initializer: Initializer of the registered service
  797. - Returns: The registered service entry with 1 arguments
  798. - Important: Might fail if one of the dependencies is unresolvable.
  799. */
  800. @discardableResult
  801. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L)) -> Service) -> ServiceEntry<Service> {
  802. return self.register(service.self, name: name, factory: { res, arg1 in
  803. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1); let l: L? = res.resolve(argument: arg1)
  804. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l)
  805. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!))
  806. } as (Resolver, Arg1) -> Service)
  807. }
  808. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  809. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  810. - Parameters:
  811. - service: Registered service type
  812. - name: Optional name of the service
  813. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  814. - initializer: Initializer of the registered service
  815. - Returns: The registered service entry with 2 arguments
  816. - Important: Might fail if one of the dependencies is unresolvable.
  817. */
  818. @discardableResult
  819. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L)) -> Service) -> ServiceEntry<Service> {
  820. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  821. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  822. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2); let l: L? = res.resolve(arguments: arg1, arg2)
  823. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l)
  824. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!))
  825. } as (Resolver, Arg1, Arg2) -> Service)
  826. }
  827. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  828. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  829. - Parameters:
  830. - service: Registered service type
  831. - name: Optional name of the service
  832. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  833. - initializer: Initializer of the registered service
  834. - Returns: The registered service entry with 3 arguments
  835. - Important: Might fail if one of the dependencies is unresolvable.
  836. */
  837. @discardableResult
  838. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L)) -> Service) -> ServiceEntry<Service> {
  839. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  840. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  841. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3); let l: L? = res.resolve(arguments: arg1, arg2, arg3)
  842. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l)
  843. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!))
  844. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  845. }
  846. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  847. Usage: `autoregister(MyService.self), initializer: MyService.init`
  848. - Parameters:
  849. - service: Registered service type
  850. - name: Optional name of the service
  851. - initializer: Initializer of the registered service
  852. - Returns: The registered service entry
  853. - Important: Might fail if one of the dependencies is unresolvable.
  854. */
  855. @discardableResult
  856. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M)) -> Service) -> ServiceEntry<Service> {
  857. return self.register(service.self, name: name, factory: { res in
  858. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve(); let l: L? = res.resolve(); let m: M? = res.resolve()
  859. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m)
  860. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!))
  861. } as (Resolver) -> Service)
  862. }
  863. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  864. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  865. - Parameters:
  866. - service: Registered service type
  867. - name: Optional name of the service
  868. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  869. - initializer: Initializer of the registered service
  870. - Returns: The registered service entry with 1 arguments
  871. - Important: Might fail if one of the dependencies is unresolvable.
  872. */
  873. @discardableResult
  874. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M)) -> Service) -> ServiceEntry<Service> {
  875. return self.register(service.self, name: name, factory: { res, arg1 in
  876. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1); let l: L? = res.resolve(argument: arg1); let m: M? = res.resolve(argument: arg1)
  877. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m)
  878. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!))
  879. } as (Resolver, Arg1) -> Service)
  880. }
  881. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  882. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  883. - Parameters:
  884. - service: Registered service type
  885. - name: Optional name of the service
  886. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  887. - initializer: Initializer of the registered service
  888. - Returns: The registered service entry with 2 arguments
  889. - Important: Might fail if one of the dependencies is unresolvable.
  890. */
  891. @discardableResult
  892. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M)) -> Service) -> ServiceEntry<Service> {
  893. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  894. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  895. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2); let l: L? = res.resolve(arguments: arg1, arg2); let m: M? = res.resolve(arguments: arg1, arg2)
  896. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m)
  897. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!))
  898. } as (Resolver, Arg1, Arg2) -> Service)
  899. }
  900. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  901. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  902. - Parameters:
  903. - service: Registered service type
  904. - name: Optional name of the service
  905. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  906. - initializer: Initializer of the registered service
  907. - Returns: The registered service entry with 3 arguments
  908. - Important: Might fail if one of the dependencies is unresolvable.
  909. */
  910. @discardableResult
  911. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M)) -> Service) -> ServiceEntry<Service> {
  912. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  913. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  914. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3); let l: L? = res.resolve(arguments: arg1, arg2, arg3); let m: M? = res.resolve(arguments: arg1, arg2, arg3)
  915. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m)
  916. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!))
  917. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  918. }
  919. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  920. Usage: `autoregister(MyService.self), initializer: MyService.init`
  921. - Parameters:
  922. - service: Registered service type
  923. - name: Optional name of the service
  924. - initializer: Initializer of the registered service
  925. - Returns: The registered service entry
  926. - Important: Might fail if one of the dependencies is unresolvable.
  927. */
  928. @discardableResult
  929. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N)) -> Service) -> ServiceEntry<Service> {
  930. return self.register(service.self, name: name, factory: { res in
  931. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve(); let l: L? = res.resolve(); let m: M? = res.resolve(); let n: N? = res.resolve()
  932. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n)
  933. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!))
  934. } as (Resolver) -> Service)
  935. }
  936. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  937. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  938. - Parameters:
  939. - service: Registered service type
  940. - name: Optional name of the service
  941. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  942. - initializer: Initializer of the registered service
  943. - Returns: The registered service entry with 1 arguments
  944. - Important: Might fail if one of the dependencies is unresolvable.
  945. */
  946. @discardableResult
  947. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N)) -> Service) -> ServiceEntry<Service> {
  948. return self.register(service.self, name: name, factory: { res, arg1 in
  949. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1); let l: L? = res.resolve(argument: arg1); let m: M? = res.resolve(argument: arg1); let n: N? = res.resolve(argument: arg1)
  950. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n)
  951. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!))
  952. } as (Resolver, Arg1) -> Service)
  953. }
  954. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  955. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  956. - Parameters:
  957. - service: Registered service type
  958. - name: Optional name of the service
  959. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  960. - initializer: Initializer of the registered service
  961. - Returns: The registered service entry with 2 arguments
  962. - Important: Might fail if one of the dependencies is unresolvable.
  963. */
  964. @discardableResult
  965. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N)) -> Service) -> ServiceEntry<Service> {
  966. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  967. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  968. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2); let l: L? = res.resolve(arguments: arg1, arg2); let m: M? = res.resolve(arguments: arg1, arg2); let n: N? = res.resolve(arguments: arg1, arg2)
  969. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n)
  970. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!))
  971. } as (Resolver, Arg1, Arg2) -> Service)
  972. }
  973. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  974. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  975. - Parameters:
  976. - service: Registered service type
  977. - name: Optional name of the service
  978. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  979. - initializer: Initializer of the registered service
  980. - Returns: The registered service entry with 3 arguments
  981. - Important: Might fail if one of the dependencies is unresolvable.
  982. */
  983. @discardableResult
  984. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N)) -> Service) -> ServiceEntry<Service> {
  985. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  986. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  987. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3); let l: L? = res.resolve(arguments: arg1, arg2, arg3); let m: M? = res.resolve(arguments: arg1, arg2, arg3); let n: N? = res.resolve(arguments: arg1, arg2, arg3)
  988. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n)
  989. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!))
  990. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  991. }
  992. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  993. Usage: `autoregister(MyService.self), initializer: MyService.init`
  994. - Parameters:
  995. - service: Registered service type
  996. - name: Optional name of the service
  997. - initializer: Initializer of the registered service
  998. - Returns: The registered service entry
  999. - Important: Might fail if one of the dependencies is unresolvable.
  1000. */
  1001. @discardableResult
  1002. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O)) -> Service) -> ServiceEntry<Service> {
  1003. return self.register(service.self, name: name, factory: { res in
  1004. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve(); let l: L? = res.resolve(); let m: M? = res.resolve(); let n: N? = res.resolve(); let o: O? = res.resolve()
  1005. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
  1006. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!))
  1007. } as (Resolver) -> Service)
  1008. }
  1009. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1010. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  1011. - Parameters:
  1012. - service: Registered service type
  1013. - name: Optional name of the service
  1014. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1015. - initializer: Initializer of the registered service
  1016. - Returns: The registered service entry with 1 arguments
  1017. - Important: Might fail if one of the dependencies is unresolvable.
  1018. */
  1019. @discardableResult
  1020. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O)) -> Service) -> ServiceEntry<Service> {
  1021. return self.register(service.self, name: name, factory: { res, arg1 in
  1022. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1); let l: L? = res.resolve(argument: arg1); let m: M? = res.resolve(argument: arg1); let n: N? = res.resolve(argument: arg1); let o: O? = res.resolve(argument: arg1)
  1023. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
  1024. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!))
  1025. } as (Resolver, Arg1) -> Service)
  1026. }
  1027. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1028. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  1029. - Parameters:
  1030. - service: Registered service type
  1031. - name: Optional name of the service
  1032. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1033. - initializer: Initializer of the registered service
  1034. - Returns: The registered service entry with 2 arguments
  1035. - Important: Might fail if one of the dependencies is unresolvable.
  1036. */
  1037. @discardableResult
  1038. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O)) -> Service) -> ServiceEntry<Service> {
  1039. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  1040. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  1041. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2); let l: L? = res.resolve(arguments: arg1, arg2); let m: M? = res.resolve(arguments: arg1, arg2); let n: N? = res.resolve(arguments: arg1, arg2); let o: O? = res.resolve(arguments: arg1, arg2)
  1042. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
  1043. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!))
  1044. } as (Resolver, Arg1, Arg2) -> Service)
  1045. }
  1046. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1047. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  1048. - Parameters:
  1049. - service: Registered service type
  1050. - name: Optional name of the service
  1051. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1052. - initializer: Initializer of the registered service
  1053. - Returns: The registered service entry with 3 arguments
  1054. - Important: Might fail if one of the dependencies is unresolvable.
  1055. */
  1056. @discardableResult
  1057. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O)) -> Service) -> ServiceEntry<Service> {
  1058. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  1059. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  1060. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3); let l: L? = res.resolve(arguments: arg1, arg2, arg3); let m: M? = res.resolve(arguments: arg1, arg2, arg3); let n: N? = res.resolve(arguments: arg1, arg2, arg3); let o: O? = res.resolve(arguments: arg1, arg2, arg3)
  1061. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
  1062. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!))
  1063. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  1064. }
  1065. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1066. Usage: `autoregister(MyService.self), initializer: MyService.init`
  1067. - Parameters:
  1068. - service: Registered service type
  1069. - name: Optional name of the service
  1070. - initializer: Initializer of the registered service
  1071. - Returns: The registered service entry
  1072. - Important: Might fail if one of the dependencies is unresolvable.
  1073. */
  1074. @discardableResult
  1075. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)) -> Service) -> ServiceEntry<Service> {
  1076. return self.register(service.self, name: name, factory: { res in
  1077. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve(); let l: L? = res.resolve(); let m: M? = res.resolve(); let n: N? = res.resolve(); let o: O? = res.resolve(); let p: P? = res.resolve()
  1078. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
  1079. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!))
  1080. } as (Resolver) -> Service)
  1081. }
  1082. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1083. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  1084. - Parameters:
  1085. - service: Registered service type
  1086. - name: Optional name of the service
  1087. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1088. - initializer: Initializer of the registered service
  1089. - Returns: The registered service entry with 1 arguments
  1090. - Important: Might fail if one of the dependencies is unresolvable.
  1091. */
  1092. @discardableResult
  1093. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)) -> Service) -> ServiceEntry<Service> {
  1094. return self.register(service.self, name: name, factory: { res, arg1 in
  1095. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1); let l: L? = res.resolve(argument: arg1); let m: M? = res.resolve(argument: arg1); let n: N? = res.resolve(argument: arg1); let o: O? = res.resolve(argument: arg1); let p: P? = res.resolve(argument: arg1)
  1096. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
  1097. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!))
  1098. } as (Resolver, Arg1) -> Service)
  1099. }
  1100. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1101. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  1102. - Parameters:
  1103. - service: Registered service type
  1104. - name: Optional name of the service
  1105. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1106. - initializer: Initializer of the registered service
  1107. - Returns: The registered service entry with 2 arguments
  1108. - Important: Might fail if one of the dependencies is unresolvable.
  1109. */
  1110. @discardableResult
  1111. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)) -> Service) -> ServiceEntry<Service> {
  1112. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  1113. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  1114. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2); let l: L? = res.resolve(arguments: arg1, arg2); let m: M? = res.resolve(arguments: arg1, arg2); let n: N? = res.resolve(arguments: arg1, arg2); let o: O? = res.resolve(arguments: arg1, arg2); let p: P? = res.resolve(arguments: arg1, arg2)
  1115. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
  1116. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!))
  1117. } as (Resolver, Arg1, Arg2) -> Service)
  1118. }
  1119. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1120. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  1121. - Parameters:
  1122. - service: Registered service type
  1123. - name: Optional name of the service
  1124. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1125. - initializer: Initializer of the registered service
  1126. - Returns: The registered service entry with 3 arguments
  1127. - Important: Might fail if one of the dependencies is unresolvable.
  1128. */
  1129. @discardableResult
  1130. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)) -> Service) -> ServiceEntry<Service> {
  1131. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  1132. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  1133. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3); let l: L? = res.resolve(arguments: arg1, arg2, arg3); let m: M? = res.resolve(arguments: arg1, arg2, arg3); let n: N? = res.resolve(arguments: arg1, arg2, arg3); let o: O? = res.resolve(arguments: arg1, arg2, arg3); let p: P? = res.resolve(arguments: arg1, arg2, arg3)
  1134. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
  1135. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!))
  1136. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  1137. }
  1138. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1139. Usage: `autoregister(MyService.self), initializer: MyService.init`
  1140. - Parameters:
  1141. - service: Registered service type
  1142. - name: Optional name of the service
  1143. - initializer: Initializer of the registered service
  1144. - Returns: The registered service entry
  1145. - Important: Might fail if one of the dependencies is unresolvable.
  1146. */
  1147. @discardableResult
  1148. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q)) -> Service) -> ServiceEntry<Service> {
  1149. return self.register(service.self, name: name, factory: { res in
  1150. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve(); let l: L? = res.resolve(); let m: M? = res.resolve(); let n: N? = res.resolve(); let o: O? = res.resolve(); let p: P? = res.resolve(); let q: Q? = res.resolve()
  1151. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
  1152. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!))
  1153. } as (Resolver) -> Service)
  1154. }
  1155. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1156. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  1157. - Parameters:
  1158. - service: Registered service type
  1159. - name: Optional name of the service
  1160. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1161. - initializer: Initializer of the registered service
  1162. - Returns: The registered service entry with 1 arguments
  1163. - Important: Might fail if one of the dependencies is unresolvable.
  1164. */
  1165. @discardableResult
  1166. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q)) -> Service) -> ServiceEntry<Service> {
  1167. return self.register(service.self, name: name, factory: { res, arg1 in
  1168. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1); let l: L? = res.resolve(argument: arg1); let m: M? = res.resolve(argument: arg1); let n: N? = res.resolve(argument: arg1); let o: O? = res.resolve(argument: arg1); let p: P? = res.resolve(argument: arg1); let q: Q? = res.resolve(argument: arg1)
  1169. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
  1170. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!))
  1171. } as (Resolver, Arg1) -> Service)
  1172. }
  1173. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1174. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  1175. - Parameters:
  1176. - service: Registered service type
  1177. - name: Optional name of the service
  1178. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1179. - initializer: Initializer of the registered service
  1180. - Returns: The registered service entry with 2 arguments
  1181. - Important: Might fail if one of the dependencies is unresolvable.
  1182. */
  1183. @discardableResult
  1184. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q)) -> Service) -> ServiceEntry<Service> {
  1185. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  1186. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  1187. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2); let l: L? = res.resolve(arguments: arg1, arg2); let m: M? = res.resolve(arguments: arg1, arg2); let n: N? = res.resolve(arguments: arg1, arg2); let o: O? = res.resolve(arguments: arg1, arg2); let p: P? = res.resolve(arguments: arg1, arg2); let q: Q? = res.resolve(arguments: arg1, arg2)
  1188. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
  1189. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!))
  1190. } as (Resolver, Arg1, Arg2) -> Service)
  1191. }
  1192. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1193. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  1194. - Parameters:
  1195. - service: Registered service type
  1196. - name: Optional name of the service
  1197. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1198. - initializer: Initializer of the registered service
  1199. - Returns: The registered service entry with 3 arguments
  1200. - Important: Might fail if one of the dependencies is unresolvable.
  1201. */
  1202. @discardableResult
  1203. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q)) -> Service) -> ServiceEntry<Service> {
  1204. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  1205. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  1206. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3); let l: L? = res.resolve(arguments: arg1, arg2, arg3); let m: M? = res.resolve(arguments: arg1, arg2, arg3); let n: N? = res.resolve(arguments: arg1, arg2, arg3); let o: O? = res.resolve(arguments: arg1, arg2, arg3); let p: P? = res.resolve(arguments: arg1, arg2, arg3); let q: Q? = res.resolve(arguments: arg1, arg2, arg3)
  1207. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
  1208. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!))
  1209. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  1210. }
  1211. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1212. Usage: `autoregister(MyService.self), initializer: MyService.init`
  1213. - Parameters:
  1214. - service: Registered service type
  1215. - name: Optional name of the service
  1216. - initializer: Initializer of the registered service
  1217. - Returns: The registered service entry
  1218. - Important: Might fail if one of the dependencies is unresolvable.
  1219. */
  1220. @discardableResult
  1221. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R)) -> Service) -> ServiceEntry<Service> {
  1222. return self.register(service.self, name: name, factory: { res in
  1223. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve(); let l: L? = res.resolve(); let m: M? = res.resolve(); let n: N? = res.resolve(); let o: O? = res.resolve(); let p: P? = res.resolve(); let q: Q? = res.resolve(); let r: R? = res.resolve()
  1224. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)
  1225. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!))
  1226. } as (Resolver) -> Service)
  1227. }
  1228. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1229. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  1230. - Parameters:
  1231. - service: Registered service type
  1232. - name: Optional name of the service
  1233. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1234. - initializer: Initializer of the registered service
  1235. - Returns: The registered service entry with 1 arguments
  1236. - Important: Might fail if one of the dependencies is unresolvable.
  1237. */
  1238. @discardableResult
  1239. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R)) -> Service) -> ServiceEntry<Service> {
  1240. return self.register(service.self, name: name, factory: { res, arg1 in
  1241. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1); let l: L? = res.resolve(argument: arg1); let m: M? = res.resolve(argument: arg1); let n: N? = res.resolve(argument: arg1); let o: O? = res.resolve(argument: arg1); let p: P? = res.resolve(argument: arg1); let q: Q? = res.resolve(argument: arg1); let r: R? = res.resolve(argument: arg1)
  1242. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)
  1243. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!))
  1244. } as (Resolver, Arg1) -> Service)
  1245. }
  1246. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1247. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  1248. - Parameters:
  1249. - service: Registered service type
  1250. - name: Optional name of the service
  1251. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1252. - initializer: Initializer of the registered service
  1253. - Returns: The registered service entry with 2 arguments
  1254. - Important: Might fail if one of the dependencies is unresolvable.
  1255. */
  1256. @discardableResult
  1257. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R)) -> Service) -> ServiceEntry<Service> {
  1258. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  1259. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  1260. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2); let l: L? = res.resolve(arguments: arg1, arg2); let m: M? = res.resolve(arguments: arg1, arg2); let n: N? = res.resolve(arguments: arg1, arg2); let o: O? = res.resolve(arguments: arg1, arg2); let p: P? = res.resolve(arguments: arg1, arg2); let q: Q? = res.resolve(arguments: arg1, arg2); let r: R? = res.resolve(arguments: arg1, arg2)
  1261. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)
  1262. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!))
  1263. } as (Resolver, Arg1, Arg2) -> Service)
  1264. }
  1265. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1266. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  1267. - Parameters:
  1268. - service: Registered service type
  1269. - name: Optional name of the service
  1270. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1271. - initializer: Initializer of the registered service
  1272. - Returns: The registered service entry with 3 arguments
  1273. - Important: Might fail if one of the dependencies is unresolvable.
  1274. */
  1275. @discardableResult
  1276. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R)) -> Service) -> ServiceEntry<Service> {
  1277. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  1278. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  1279. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3); let l: L? = res.resolve(arguments: arg1, arg2, arg3); let m: M? = res.resolve(arguments: arg1, arg2, arg3); let n: N? = res.resolve(arguments: arg1, arg2, arg3); let o: O? = res.resolve(arguments: arg1, arg2, arg3); let p: P? = res.resolve(arguments: arg1, arg2, arg3); let q: Q? = res.resolve(arguments: arg1, arg2, arg3); let r: R? = res.resolve(arguments: arg1, arg2, arg3)
  1280. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)
  1281. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!))
  1282. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  1283. }
  1284. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1285. Usage: `autoregister(MyService.self), initializer: MyService.init`
  1286. - Parameters:
  1287. - service: Registered service type
  1288. - name: Optional name of the service
  1289. - initializer: Initializer of the registered service
  1290. - Returns: The registered service entry
  1291. - Important: Might fail if one of the dependencies is unresolvable.
  1292. */
  1293. @discardableResult
  1294. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S)) -> Service) -> ServiceEntry<Service> {
  1295. return self.register(service.self, name: name, factory: { res in
  1296. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve(); let l: L? = res.resolve(); let m: M? = res.resolve(); let n: N? = res.resolve(); let o: O? = res.resolve(); let p: P? = res.resolve(); let q: Q? = res.resolve(); let r: R? = res.resolve(); let s: S? = res.resolve()
  1297. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)
  1298. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!, s!))
  1299. } as (Resolver) -> Service)
  1300. }
  1301. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1302. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  1303. - Parameters:
  1304. - service: Registered service type
  1305. - name: Optional name of the service
  1306. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1307. - initializer: Initializer of the registered service
  1308. - Returns: The registered service entry with 1 arguments
  1309. - Important: Might fail if one of the dependencies is unresolvable.
  1310. */
  1311. @discardableResult
  1312. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S)) -> Service) -> ServiceEntry<Service> {
  1313. return self.register(service.self, name: name, factory: { res, arg1 in
  1314. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1); let l: L? = res.resolve(argument: arg1); let m: M? = res.resolve(argument: arg1); let n: N? = res.resolve(argument: arg1); let o: O? = res.resolve(argument: arg1); let p: P? = res.resolve(argument: arg1); let q: Q? = res.resolve(argument: arg1); let r: R? = res.resolve(argument: arg1); let s: S? = res.resolve(argument: arg1)
  1315. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)
  1316. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!, s!))
  1317. } as (Resolver, Arg1) -> Service)
  1318. }
  1319. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1320. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  1321. - Parameters:
  1322. - service: Registered service type
  1323. - name: Optional name of the service
  1324. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1325. - initializer: Initializer of the registered service
  1326. - Returns: The registered service entry with 2 arguments
  1327. - Important: Might fail if one of the dependencies is unresolvable.
  1328. */
  1329. @discardableResult
  1330. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S)) -> Service) -> ServiceEntry<Service> {
  1331. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  1332. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  1333. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2); let l: L? = res.resolve(arguments: arg1, arg2); let m: M? = res.resolve(arguments: arg1, arg2); let n: N? = res.resolve(arguments: arg1, arg2); let o: O? = res.resolve(arguments: arg1, arg2); let p: P? = res.resolve(arguments: arg1, arg2); let q: Q? = res.resolve(arguments: arg1, arg2); let r: R? = res.resolve(arguments: arg1, arg2); let s: S? = res.resolve(arguments: arg1, arg2)
  1334. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)
  1335. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!, s!))
  1336. } as (Resolver, Arg1, Arg2) -> Service)
  1337. }
  1338. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1339. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  1340. - Parameters:
  1341. - service: Registered service type
  1342. - name: Optional name of the service
  1343. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1344. - initializer: Initializer of the registered service
  1345. - Returns: The registered service entry with 3 arguments
  1346. - Important: Might fail if one of the dependencies is unresolvable.
  1347. */
  1348. @discardableResult
  1349. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S)) -> Service) -> ServiceEntry<Service> {
  1350. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  1351. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  1352. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3); let l: L? = res.resolve(arguments: arg1, arg2, arg3); let m: M? = res.resolve(arguments: arg1, arg2, arg3); let n: N? = res.resolve(arguments: arg1, arg2, arg3); let o: O? = res.resolve(arguments: arg1, arg2, arg3); let p: P? = res.resolve(arguments: arg1, arg2, arg3); let q: Q? = res.resolve(arguments: arg1, arg2, arg3); let r: R? = res.resolve(arguments: arg1, arg2, arg3); let s: S? = res.resolve(arguments: arg1, arg2, arg3)
  1353. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)
  1354. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!, s!))
  1355. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  1356. }
  1357. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1358. Usage: `autoregister(MyService.self), initializer: MyService.init`
  1359. - Parameters:
  1360. - service: Registered service type
  1361. - name: Optional name of the service
  1362. - initializer: Initializer of the registered service
  1363. - Returns: The registered service entry
  1364. - Important: Might fail if one of the dependencies is unresolvable.
  1365. */
  1366. @discardableResult
  1367. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T>(_ service: Service.Type, name: String? = nil, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)) -> Service) -> ServiceEntry<Service> {
  1368. return self.register(service.self, name: name, factory: { res in
  1369. let a: A? = res.resolve(); let b: B? = res.resolve(); let c: C? = res.resolve(); let d: D? = res.resolve(); let e: E? = res.resolve(); let f: F? = res.resolve(); let g: G? = res.resolve(); let h: H? = res.resolve(); let i: I? = res.resolve(); let j: J? = res.resolve(); let k: K? = res.resolve(); let l: L? = res.resolve(); let m: M? = res.resolve(); let n: N? = res.resolve(); let o: O? = res.resolve(); let p: P? = res.resolve(); let q: Q? = res.resolve(); let r: R? = res.resolve(); let s: S? = res.resolve(); let t: T? = res.resolve()
  1370. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)
  1371. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!, s!, t!))
  1372. } as (Resolver) -> Service)
  1373. }
  1374. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1375. Usage: `autoregister(MyService.self, argument: Arg1.self), initializer: MyService.init`
  1376. - Parameters:
  1377. - service: Registered service type
  1378. - name: Optional name of the service
  1379. - argument: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1380. - initializer: Initializer of the registered service
  1381. - Returns: The registered service entry with 1 arguments
  1382. - Important: Might fail if one of the dependencies is unresolvable.
  1383. */
  1384. @discardableResult
  1385. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, Arg1>(_ service: Service.Type, name: String? = nil, argument arg1: Arg1.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)) -> Service) -> ServiceEntry<Service> {
  1386. return self.register(service.self, name: name, factory: { res, arg1 in
  1387. let a: A? = res.resolve(argument: arg1); let b: B? = res.resolve(argument: arg1); let c: C? = res.resolve(argument: arg1); let d: D? = res.resolve(argument: arg1); let e: E? = res.resolve(argument: arg1); let f: F? = res.resolve(argument: arg1); let g: G? = res.resolve(argument: arg1); let h: H? = res.resolve(argument: arg1); let i: I? = res.resolve(argument: arg1); let j: J? = res.resolve(argument: arg1); let k: K? = res.resolve(argument: arg1); let l: L? = res.resolve(argument: arg1); let m: M? = res.resolve(argument: arg1); let n: N? = res.resolve(argument: arg1); let o: O? = res.resolve(argument: arg1); let p: P? = res.resolve(argument: arg1); let q: Q? = res.resolve(argument: arg1); let r: R? = res.resolve(argument: arg1); let s: S? = res.resolve(argument: arg1); let t: T? = res.resolve(argument: arg1)
  1388. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)
  1389. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!, s!, t!))
  1390. } as (Resolver, Arg1) -> Service)
  1391. }
  1392. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1393. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self), initializer: MyService.init`
  1394. - Parameters:
  1395. - service: Registered service type
  1396. - name: Optional name of the service
  1397. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1398. - initializer: Initializer of the registered service
  1399. - Returns: The registered service entry with 2 arguments
  1400. - Important: Might fail if one of the dependencies is unresolvable.
  1401. */
  1402. @discardableResult
  1403. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, Arg1, Arg2>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)) -> Service) -> ServiceEntry<Service> {
  1404. precondition(hasUnique(arguments: [arg1, arg2]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2)) is not supported")
  1405. return self.register(service.self, name: name, factory: { res, arg1, arg2 in
  1406. let a: A? = res.resolve(arguments: arg1, arg2); let b: B? = res.resolve(arguments: arg1, arg2); let c: C? = res.resolve(arguments: arg1, arg2); let d: D? = res.resolve(arguments: arg1, arg2); let e: E? = res.resolve(arguments: arg1, arg2); let f: F? = res.resolve(arguments: arg1, arg2); let g: G? = res.resolve(arguments: arg1, arg2); let h: H? = res.resolve(arguments: arg1, arg2); let i: I? = res.resolve(arguments: arg1, arg2); let j: J? = res.resolve(arguments: arg1, arg2); let k: K? = res.resolve(arguments: arg1, arg2); let l: L? = res.resolve(arguments: arg1, arg2); let m: M? = res.resolve(arguments: arg1, arg2); let n: N? = res.resolve(arguments: arg1, arg2); let o: O? = res.resolve(arguments: arg1, arg2); let p: P? = res.resolve(arguments: arg1, arg2); let q: Q? = res.resolve(arguments: arg1, arg2); let r: R? = res.resolve(arguments: arg1, arg2); let s: S? = res.resolve(arguments: arg1, arg2); let t: T? = res.resolve(arguments: arg1, arg2)
  1407. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)
  1408. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!, s!, t!))
  1409. } as (Resolver, Arg1, Arg2) -> Service)
  1410. }
  1411. /** Registers a factory that resolves the Service based on dependencies inferred from the Service initializer.
  1412. Usage: `autoregister(MyService.self, arguments: Arg1.self, Arg2.self, Arg3.self), initializer: MyService.init`
  1413. - Parameters:
  1414. - service: Registered service type
  1415. - name: Optional name of the service
  1416. - arguments: Argument type(s) that will be resolved dynamically instead of resolving dependency
  1417. - initializer: Initializer of the registered service
  1418. - Returns: The registered service entry with 3 arguments
  1419. - Important: Might fail if one of the dependencies is unresolvable.
  1420. */
  1421. @discardableResult
  1422. func autoregister<Service, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, Arg1, Arg2, Arg3>(_ service: Service.Type, name: String? = nil, arguments arg1: Arg1.Type, _ arg2: Arg2.Type, _ arg3: Arg3.Type, initializer: @escaping ((A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)) -> Service) -> ServiceEntry<Service> {
  1423. precondition(hasUnique(arguments: [arg1, arg2, arg3]), "Autoregistration of service with dynamic arguments of the same type (\(arg1), \(arg2), \(arg3)) is not supported")
  1424. return self.register(service.self, name: name, factory: { res, arg1, arg2, arg3 in
  1425. let a: A? = res.resolve(arguments: arg1, arg2, arg3); let b: B? = res.resolve(arguments: arg1, arg2, arg3); let c: C? = res.resolve(arguments: arg1, arg2, arg3); let d: D? = res.resolve(arguments: arg1, arg2, arg3); let e: E? = res.resolve(arguments: arg1, arg2, arg3); let f: F? = res.resolve(arguments: arg1, arg2, arg3); let g: G? = res.resolve(arguments: arg1, arg2, arg3); let h: H? = res.resolve(arguments: arg1, arg2, arg3); let i: I? = res.resolve(arguments: arg1, arg2, arg3); let j: J? = res.resolve(arguments: arg1, arg2, arg3); let k: K? = res.resolve(arguments: arg1, arg2, arg3); let l: L? = res.resolve(arguments: arg1, arg2, arg3); let m: M? = res.resolve(arguments: arg1, arg2, arg3); let n: N? = res.resolve(arguments: arg1, arg2, arg3); let o: O? = res.resolve(arguments: arg1, arg2, arg3); let p: P? = res.resolve(arguments: arg1, arg2, arg3); let q: Q? = res.resolve(arguments: arg1, arg2, arg3); let r: R? = res.resolve(arguments: arg1, arg2, arg3); let s: S? = res.resolve(arguments: arg1, arg2, arg3); let t: T? = res.resolve(arguments: arg1, arg2, arg3)
  1426. checkResolved(initializer: initializer, services: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)
  1427. return initializer((a!, b!, c!, d!, e!, f!, g!, h!, i!, j!, k!, l!, m!, n!, o!, p!, q!, r!, s!, t!))
  1428. } as (Resolver, Arg1, Arg2, Arg3) -> Service)
  1429. }
  1430. }