如何解决Swinject 返回 nil 因为对象注册错误
这就是我为 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:解析失败。预计报名: { 服务:FIRMessaging,工厂:解析器 -> FIRMessaging } 可用注册: { 服务:FIRMessaging,工厂:解析器 -> FIRMessaging,ObjectScope:图 } 致命错误:在展开可选值时意外发现 nil:文件 ToolsAssembly.swift,第 72 行
为什么会这样?
解决方法
我可以邀请您检查 Swift 的新 DIContainer 吗?
在此库中,您可以使用属性包装器访问您的依赖项。
@Injected(.githubService)
var githubService: FetchService
@Injected(.by(type: FetchService.self,withKey: "gitlab"))
var gitlabService: FetchService
@InjectedSafe
var externalService: ExternalSingletonService?
希望它适合您的需要。
,也许问题是你必须注册一个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()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。