Add dependency injection
This commit is contained in:
parent
151ed6d78b
commit
bf94769573
9 changed files with 140 additions and 51 deletions
|
@ -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]! {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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() }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue