Add dependency injection

This commit is contained in:
Artur Gurgul 2025-08-03 13:39:29 +02:00
parent 151ed6d78b
commit bf94769573
9 changed files with 140 additions and 51 deletions

View file

@ -9,14 +9,16 @@ import Combine
import React
@objc(Emitter)
class Emitter: RCTEventEmitter {
class Emitter: RCTEventEmitter, MessageEmitter {
@Injected private var eventEmitter: EventEmitter
override static func requiresMainQueueSetup() -> Bool {
return true
}
override init() {
super.init()
EventEmitter.sharedInstance.register(eventEmitter: self)
eventEmitter.register(eventEmitter: self)
}
override func supportedEvents() -> [String]! {

View file

@ -7,22 +7,34 @@
import Foundation
class EventEmitter {
static let sharedInstance = EventEmitter()
protocol MessageEmitter {
func send(message: String)
}
private var eventEmitter: Emitter?
class NullMessageEmitter: MessageEmitter {
func send(message: String) {
print("Warning: Emiter is not ready yet")
}
}
private init() {}
protocol EventEmitter {
func send(message: String)
func register(eventEmitter: Emitter)
}
class DefaultEventEmitter: EventEmitter {
private var eventEmitter: MessageEmitter = NullMessageEmitter()
func register(eventEmitter: Emitter) {
self.eventEmitter = eventEmitter
}
func send(message: String) {
eventEmitter?.send(message: message)
eventEmitter.send(message: message)
}
var isReady: Bool {
return eventEmitter != nil
return (eventEmitter is NullMessageEmitter) == false
}
}

View file

@ -13,12 +13,12 @@ import ReactAppDependencyProvider
final class SharedState: ObservableObject {
var reactNativeFactory: RCTReactNativeFactory?
private let emitter = EventEmitter.sharedInstance
let container = DependencyContainer()
// SwiftUI => RN => SwiftUI
@Published var message: String = ""
func send(message: String) {
emitter.send(message: message)
init() {
container.register(EventEmitter.self) { _ in DefaultEventEmitter() }
}
}