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() observerRef.id = DIContainer.shared.addObserver(for: keyPath) { Task { @MainActor in StateManager.updateViews() } } } } private final class ObserverRef { var id: UUID? deinit { if let id { DIContainer.shared.removeObserver(id) } } }