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.

38 lines
1.1 KiB

2 years ago
  1. //
  2. // Copyright © 2019 Swinject Contributors. All rights reserved.
  3. //
  4. internal final class SynchronizedResolver {
  5. internal let container: Container
  6. internal init(container: Container) {
  7. self.container = container
  8. }
  9. }
  10. extension SynchronizedResolver: _Resolver {
  11. // swiftlint:disable:next identifier_name
  12. internal func _resolve<Service, Arguments>(
  13. name: String?,
  14. option: ServiceKeyOption?,
  15. invoker: @escaping ((Arguments) -> Any) -> Any
  16. ) -> Service? {
  17. return container.lock.sync {
  18. self.container._resolve(name: name, option: option, invoker: invoker)
  19. }
  20. }
  21. }
  22. extension SynchronizedResolver: Resolver {
  23. internal func resolve<Service>(_ serviceType: Service.Type) -> Service? {
  24. return container.lock.sync {
  25. self.container.resolve(serviceType)
  26. }
  27. }
  28. internal func resolve<Service>(_ serviceType: Service.Type, name: String?) -> Service? {
  29. return container.lock.sync {
  30. self.container.resolve(serviceType, name: name)
  31. }
  32. }
  33. }