Skip to content

Instantly share code, notes, and snippets.

@cjnevin
Created October 27, 2022 13:16
Show Gist options
  • Save cjnevin/a3cec5dfa600a897a53bf9598dc3b56c to your computer and use it in GitHub Desktop.
Save cjnevin/a3cec5dfa600a897a53bf9598dc3b56c to your computer and use it in GitHub Desktop.
protocol Resolver {
func resolve<T>(_ type: T.Type) -> T
}
class MainResolver: Resolver {
static let shared = MainResolver()
private var dependencies: [Any] = []
func register<T>(_ dependency: T) {
dependencies.append(dependency)
}
func resolve<T>(_ type: T.Type) -> T {
dependencies.first(where: { $0 as? T != nil }) as! T
}
}
MainResolver.shared.register(UserDefaults.standard)
@propertyWrapper
struct Inject<Value> {
var wrappedValue: Value
init(_ resolver: Resolver = MainResolver.shared) {
wrappedValue = resolver.resolve(Value.self)
}
}
class Service {
@Inject var userDefaults: UserDefaults
}
let service = Service()
service.userDefaults.set("test", forKey: "key")
print(service.userDefaults.value(forKey: "key"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment