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()