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?

希望能满足您的需求。