Skip to content

Instantly share code, notes, and snippets.

@Plnda
Created May 23, 2020 21:37
Show Gist options
  • Save Plnda/d87a969553f2ec4a89a401c8fdbfce78 to your computer and use it in GitHub Desktop.
Save Plnda/d87a969553f2ec4a89a401c8fdbfce78 to your computer and use it in GitHub Desktop.
public extension Dependencies {
/// Create a overridable main resolver
fileprivate static var main = Dependencies()
func get<Service>() -> Service {
return resolve()
}
/// Function builder that accepts a single or multiple services
@_functionBuilder struct DependencyBuilder {
public static func buildBlock(_ services: Service...) -> [Service] { services }
public static func buildBlock(_ service: Service) -> Service { service }
}
/// Convienience init with our service builder
convenience init(@DependencyBuilder _ services: () -> [Service]) {
self.init()
services().forEach { register($0) }
}
/// Convienience init with our service builder
convenience init(@DependencyBuilder _ service: () -> Service) {
self.init()
register(service())
}
/// Build our graph
func build() {
Self.main = self
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment