#ios #swift #swinject
#iOS #быстрый #свинжект
Вопрос:
Вот как я регистрирую объект для 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
Почему это происходит?
Ответ №1:
Возможно, проблема в том, что вам нужно зарегистрировать FIRMessaging вместо обмена сообщениями
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)
}
Ответ №2:
Могу ли я пригласить вас проверить новый свежий контейнер DIContainer для Swift?
В этой библиотеке вы можете получить доступ к своим зависимостям с помощью оболочки свойств.
@Injected(.githubService)
var githubService: FetchService
@Injected(.by(type: FetchService.self, withKey: "gitlab"))
var gitlabService: FetchService
@InjectedSafe
var externalService: ExternalSingletonService?
Я надеюсь, что это хорошо соответствует вашим потребностям.
Ответ №3:
Вы должны позвонить FirebaseApp.configure()
, прежде чем разрешать свои зависимости.