Swinject returns nil 因为对象注册错误
Swinject returns nil because object is wrong registered
这就是我为 FirebaseMessaging
注册对象的方式:
container.register(Messaging.self) { _ in
return Messaging.messaging()
}
然后我需要使用它:
container.register(NotificationSchedulerable.self) { resolver in
let userNotificationCenter = resolver.resolve(UNUserNotificationCenter.self)!
let messaging = resolver.resolve(Messaging.self)! //unexpectadly found nil
return NotificationScheduler(userNotificationCenter: userNotificationCenter, messaging: messaging)
}
但是我收到一个错误:
Swinject: Resolution failed. Expected registration:
{ Service: FIRMessaging, Factory: Resolver -> FIRMessaging }
Available registrations:
{ Service: FIRMessaging, Factory: Resolver -> FIRMessaging, ObjectScope: graph }
Fatal error: Unexpectedly found nil while unwrapping an Optional value: file ToolsAssembly.swift, line 72
为什么会这样?
也许问题在于您必须注册一个 FIRMessaging 而不是 Messaging
https://firebase.google.com/docs/cloud-messaging/ios/client?hl=es
像这样:
container.register(FIRMessaging.self) { _ in
return Messaging.messaging()
}
然后:
container.register(NotificationSchedulerable.self) { resolver in
let userNotificationCenter = resolver.resolve(UNUserNotificationCenter.self)!
let messaging = resolver.resolve(FIRMessaging.self)! //unexpectadly found nil
return NotificationScheduler(userNotificationCenter: userNotificationCenter, messaging: messaging)
}
您应该在解决依赖关系之前调用 FirebaseApp.configure()
。
我可以邀请您查看 Swift 的新 DIContainer 吗?
在此库中,您可以使用 属性 包装器访问您的依赖项。
@Injected(.githubService)
var githubService: FetchService
@Injected(.by(type: FetchService.self, withKey: "gitlab"))
var gitlabService: FetchService
@InjectedSafe
var externalService: ExternalSingletonService?
希望能满足您的需求。
这就是我为 FirebaseMessaging
注册对象的方式:
container.register(Messaging.self) { _ in
return Messaging.messaging()
}
然后我需要使用它:
container.register(NotificationSchedulerable.self) { resolver in
let userNotificationCenter = resolver.resolve(UNUserNotificationCenter.self)!
let messaging = resolver.resolve(Messaging.self)! //unexpectadly found nil
return NotificationScheduler(userNotificationCenter: userNotificationCenter, messaging: messaging)
}
但是我收到一个错误:
Swinject: Resolution failed. Expected registration: { Service: FIRMessaging, Factory: Resolver -> FIRMessaging } Available registrations: { Service: FIRMessaging, Factory: Resolver -> FIRMessaging, ObjectScope: graph } Fatal error: Unexpectedly found nil while unwrapping an Optional value: file ToolsAssembly.swift, line 72
为什么会这样?
也许问题在于您必须注册一个 FIRMessaging 而不是 Messaging
https://firebase.google.com/docs/cloud-messaging/ios/client?hl=es
像这样:
container.register(FIRMessaging.self) { _ in
return Messaging.messaging()
}
然后:
container.register(NotificationSchedulerable.self) { resolver in
let userNotificationCenter = resolver.resolve(UNUserNotificationCenter.self)!
let messaging = resolver.resolve(FIRMessaging.self)! //unexpectadly found nil
return NotificationScheduler(userNotificationCenter: userNotificationCenter, messaging: messaging)
}
您应该在解决依赖关系之前调用 FirebaseApp.configure()
。
我可以邀请您查看 Swift 的新 DIContainer 吗?
在此库中,您可以使用 属性 包装器访问您的依赖项。
@Injected(.githubService)
var githubService: FetchService
@Injected(.by(type: FetchService.self, withKey: "gitlab"))
var gitlabService: FetchService
@InjectedSafe
var externalService: ExternalSingletonService?
希望能满足您的需求。