rockbruno / RouterService

💉Type-safe Navigation/Dependency Injection Framework for Swift
MIT License
332 stars 27 forks source link

Facing Issue with using Core Data context. #21

Open amberkatyal opened 12 months ago

amberkatyal commented 12 months ago

AppDelegate:

import Foundation
import RouterService
import RouterServiceInterface
import CoreData

extension AppDelegate {

    func registerDependencies() {
        routerService.register(dependencyFactory: {
            AppDelegate.shared.persistentContainer.viewContext
        }, forType: NSManagedObjectContext.self)
    }
}
import RouterService
import RouterServiceInterface

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    static let shared = UIApplication.shared.delegate as? AppDelegate ?? AppDelegate()

    private(set) var persistentContainer = myContainer

    let routerService = RouterService()

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        createPersistentStoreContainer { container in
            self.persistentContainer = container
        }
        ...
        // Register Dependencies
        registerDependencies()

        return true
    }

Usage:

import CoreData
import RouterServiceInterface

final class ProfileDashboardViewModel {

    // MARK: - Properties
    let navigationLeftIconResource: ImageName
    let title: String
    let employeeID: String
    let employeeName: String

    lazy private(set) var employeeProfile: EmployeeProfile = {
        if let profile = EmployeeProfile.fetch(for: self.employeeID, in: self.managedObjectContext) {
            return profile
        }
        let employeeProfile = EmployeeProfile(context: managedObjectContext)
        employeeProfile.employeeID = self.employeeID
        employeeProfile.name = self.employeeName
        return employeeProfile
    }()

    @Dependency var managedObjectContext: NSManagedObjectContext

Here getting the following error: Fatal error: Attempted to use Dependency without resolving it first!

Also when I put a breakpoint inside the register(dependencyFactory: {}closure it never hits the breakpoint.