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.
 
 
 
 

165 lines
6.4 KiB

//
// Swinject+Operators.swift
// Pods
//
// Created by Tomas Kohout on 8/30/16.
// Copyright © 2016 Swinject Contributors. All rights reserved.
//
import Swinject
import Foundation
//Already declared in Swift
//infix operator ~> { associativity left precedence 160 }
postfix operator ~>
/** Unary operator which automatically resolves the return type
Usage: `SomeClass(dependencyA: r~>, dependencyB: r~>)`
- Parameters:
- r: Resolver
- Returns: The resolved service type instance.
- Important: Fails on unresolvable service.
*/
public postfix func ~> <Service>(r: Resolver) -> Service {
return r.resolve(Service.self)!
}
/** Binary operator ~> equivalent to `r.resolve(Service.Type)!`
Usage: `SomeClass(dependencyA: r ~> DependencyA.self)`
- Parameters:
- r: Resolver
- service: Type of service to resolve.
- Returns: The resolved service type instance.
- Important: Fails on unresolvable service.
*/
public func ~> <Service>(r: Resolver, service: Service.Type) -> Service {
return r.resolve(service)!
}
/** Binary operator ~> equivalent to `r.resolve(Service.Type, name: "ServiceName")!`
Usage: `SomeClass(dependencyA: r ~> (DependencyA.self, name: "ServiceName"))`
- Parameters:
- r: Resolver
- service: Type of service to resolve.
- Returns: The resolved service type instance.
- Important: Fails on unresolvable service.
*/
public func ~> <Service>(r: Resolver, o: (service: Service.Type, name: String)) -> Service {
return r.resolve(o.service, name: o.name)!
}
/** Binary operator ~> equivalent to `r.resolve(Service.Type, argument: Arg1)!`
Usage: `SomeClass(dependencyA: r ~> (DependencyA.self, argument: arg))`
- Parameters:
- r: Resolver
- o.service: Type of service to resolve.
- o.argument: Argument to pass
- Returns: The resolved service type instance.
- Important: Fails on unresolvable service.
*/
public func ~> <Service, Arg1>(r: Resolver, o: (service: Service.Type, argument: Arg1) ) -> Service {
return r.resolve(o.service, argument: o.argument)!
}
/** Binary operator ~> equivalent to `r.resolve(Service.Type, name: String, argument: Arg1)!`
Usage: `SomeClass(dependencyA: r ~> (DependencyA.self, name: "ServiceName", argument: arg))`
- Parameters:
- r: Resolver
- o.service: Type of service to resolve.
- o.argument: Argument to pass
- Returns: The resolved service type instance.
- Important: Fails on unresolvable service.
*/
public func ~> <Service, Arg1>(r: Resolver, o: (service: Service.Type, name: String, argument: Arg1) ) -> Service {
return r.resolve(o.service, name: o.name, argument: o.argument)!
}
//@available(*, deprecated, message: "Arguments passed in sequence have been deprecated, pass arguments in tuple instead. e.g: ~> (Service.self, arguments: (arg1, arg2))")
//public func ~> <Service, Arg1: Any, Arg2: Any>(r: Resolver, o: (Service.Type, arguments: Arg1, Arg2) ) -> Service {
// return r.resolve(o.0, arguments: o.1, o.2)!
//}
@available(*, deprecated, message: "Comma-separated arguments have been deprecated, pass arguments in tuple instead. e.g: ~> (Service.self, name: \"Service\", arguments: (arg1, arg2))")
public func ~> <Service, Arg1, Arg2>(r: Resolver, o: (Service.Type, name: String, arguments: Arg1, Arg2) ) -> Service {
return r.resolve(o.0, name: o.1, arguments: o.2, o.3)!
}
@available(*, deprecated, message: "Comma-separated arguments have been deprecated, pass arguments in tuple instead. e.g: ~> (Service.self, arguments: (arg1, arg2, arg3))")
public func ~> <Service, Arg1, Arg2, Arg3>(r: Resolver, o: (Service.Type, arguments: Arg1, Arg2, Arg3) ) -> Service {
return r.resolve(o.0, arguments: o.1, o.2, o.3)!
}
@available(*, deprecated, message: "Comma-separated arguments have been deprecated, pass arguments in tuple instead. e.g: ~> (Service.self, name: \"Service\", arguments: (arg1, arg2, arg3))")
public func ~> <Service, Arg1, Arg2, Arg3>(r: Resolver, o: (Service.Type, name: String, arguments: Arg1, Arg2, Arg3) ) -> Service {
return r.resolve(o.0, name: o.1, arguments: o.2, o.3, o.4)!
}
/** Binary operator ~> equivalent to `r.resolve(Service.Type, arguments: (Arg1, Arg2))!`
Usage: `SomeClass(dependencyA: r ~> (DependencyA.self, arguments: (arg1, arg2)))`
- Parameters:
- r: Resolver
- o.service: Type of service to resolve.
- o.arguments: Arguments to pass
- Returns: The resolved service type instance.
- Important: Fails on unresolvable service.
*/
public func ~> <Service, Arg1, Arg2>(r: Resolver, o: (Service.Type, arguments: (Arg1, Arg2)) ) -> Service {
return r.resolve(o.0, arguments: o.arguments.0, o.arguments.1)!
}
/** Binary operator ~> equivalent to `r.resolve(Service.Type, name: "ServiceName", arguments: (Arg1, Arg2))!`
Usage: `SomeClass(dependencyA: r ~> (DependencyA.self, name: "ServiceName", arguments: (arg1, arg2)))`
- Parameters:
- r: Resolver
- o.service: Type of service to resolve.
- o.arguments: Arguments to pass
- Returns: The resolved service type instance.
- Important: Fails on unresolvable service.
*/
public func ~> <Service, Arg1, Arg2>(r: Resolver, o: (Service.Type, name: String, arguments: (Arg1, Arg2)) ) -> Service {
return r.resolve(o.0, name: o.1, arguments: o.arguments.0, o.arguments.1)!
}
/** Binary operator ~> equivalent to `r.resolve(Service.Type, arguments: (Arg1, Arg2, Arg3))!`
Usage: `SomeClass(dependencyA: r ~> (DependencyA.self, arguments: (arg1, arg2, arg3)))`
- Parameters:
- r: Resolver
- o.service: Type of service to resolve.
- o.arguments: Arguments to pass
- Returns: The resolved service type instance.
- Important: Fails on unresolvable service.
*/
public func ~> <Service, Arg1, Arg2, Arg3>(r: Resolver, o: (Service.Type, arguments: (Arg1, Arg2, Arg3)) ) -> Service {
return r.resolve(o.0, arguments: o.arguments.0, o.arguments.1, o.arguments.2)!
}
/** Binary operator ~> equivalent to `r.resolve(Service.Type, name: "ServiceName", arguments: (Arg1, Arg2, Arg3))!`
Usage: `SomeClass(dependencyA: r ~> (DependencyA.self, name: "ServiceName", arguments: (arg1, arg2, arg3)))`
- Parameters:
- r: Resolver
- o.service: Type of service to resolve.
- o.arguments: Arguments to pass
- Returns: The resolved service type instance.
- Important: Fails on unresolvable service.
*/
public func ~> <Service, Arg1, Arg2, Arg3>(r: Resolver, o: (Service.Type, name: String, arguments: (Arg1, Arg2, Arg3)) ) -> Service {
return r.resolve(o.0, name: o.1, arguments: o.arguments.0, o.arguments.1, o.arguments.2)!
}