hmlongco / Factory

A new approach to Container-Based Dependency Injection for Swift and SwiftUI.
MIT License
1.83k stars 115 forks source link

Xcode complaining to force cast when factory object passed as argument in container #91

Closed mahabaleshwarhnr closed 1 year ago

mahabaleshwarhnr commented 1 year ago

Hi I am exploring Factory 2.1.0. I am using constructor DI method. I am using Xcode 14.1 and swift 5.7. I cannot use Factory type in constructor as mentioned in the doc. Xcode complaining to do force downcast. I have to use resolve() to fix this problem. My container looks like this:

extension Container {
    var blogPostRepository: Factory<BlogPostsRepository> { self { BlogPostsRepositoryImpl(apiClient: self.apiClient) } }
}

extension Container {

    var blogListViewModel: Factory<BlogListViewModel> {
        Factory(self) {
            BlogListViewModel(repository: self.blogPostRepository.resolve(), mainScheduler: self.mainScheduler.resolve())
        }
    }
}

Error Screenshot:

Screenshot 2023-03-30 at 6 15 58 PM
hmlongco commented 1 year ago

You need to resolve the factory for self.apiClient() (add parens)

extension Container {
    var blogPostRepository: Factory<BlogPostsRepository> { self { BlogPostsRepositoryImpl(apiClient: self.apiClient()) }  }
}