0

这就是我注册对象的方式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:解析失败。预期注册:{ Service: FIRMessaging, Factory: Resolver -> FIRMessaging } 可用注册:{ Service: FIRMessaging, Factory: Resolver -> FIRMessaging, ObjectScope: graph } 致命错误:在展开可选值时意外发现 nil:文件 ToolsAssembly.swift ,第 72 行

为什么会发生?

4

3 回答 3

1

我可以邀请您检查一个新的DIContainer for Swift 吗?

在这个库中,您可以使用属性包装器访问您的依赖项。

@Injected(.githubService)
var githubService: FetchService

@Injected(.by(type: FetchService.self, withKey: "gitlab"))
var gitlabService: FetchService

@InjectedSafe
var externalService: ExternalSingletonService?

我希望它能很好地满足您的需求。

于 2021-08-07T21:51:49.937 回答
1

也许问题是你必须注册一个 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)
    }
于 2021-02-05T15:47:19.510 回答
0

您应该FirebaseApp.configure()在解决依赖项之前调用。

于 2021-07-01T19:38:41.603 回答