Add dependency management, AvatarViewModel and placeholder rendering now in AvatarImage.

This commit is contained in:
David Langley
2021-08-17 10:19:41 +01:00
parent 31b4da8502
commit e09138b572
17 changed files with 103 additions and 72 deletions
@@ -16,20 +16,33 @@
import Foundation
/**
Used for storing and resolving dependencies at runtime.
*/
struct DependencyContainer {
private var dependencyList: [String: Any] = [:]
// Stores the dependencies with type information removed.
private var dependencyStore: [String: Any] = [:]
/**
Resolve a dependency by type.
Given a particlar `Type` (Inferred from return type),
generate a key and retrieve from storage.
*/
func resolve<T>() -> T {
let key = String(describing: T.self)
guard let t = dependencyList[key] as? T else {
guard let t = dependencyStore[key] as? T else {
fatalError("No provider registered for type \(T.self)")
}
return t
}
/**
Register a dependency.
Given a dependency, generate a key from it's `Type` and save in storage.
*/
mutating func register<T>(dependency: T) {
let key = String(describing: T.self)
dependencyList[key] = dependency
dependencyStore[key] = dependency
}
}