import Adwaita import Foundation @propertyWrapper public struct Injected { private let keyPath: KeyPath private let observerRef: ObserverRef public var wrappedValue: T { DIContainer.shared.resolve(keyPath) } public init(_ keyPath: KeyPath) { self.keyPath = keyPath self.observerRef = ObserverRef( id: DIContainer.shared.addObserver(for: keyPath) { StateManager.updateViews() } ) } } private final class ObserverRef { let id: UUID init(id: UUID) { self.id = id } deinit { DIContainer.shared.removeObserver(id) } }