Working with Dagger 2 can significantly improve your dependency injection in Android, but developers often make mistakes that can lead to runtime errors or inefficient code. Here are some common pitfalls:
Ensuring that all classes that require dependency injection are correctly annotated is crucial:
@Inject
lateinit var someDependency: SomeDependency
If you forget to include necessary modules, your dependencies may not be provided:
@Component(modules = [SomeModule::class])
interface AppComponent {
fun inject(activity: MainActivity)
}
Using the wrong scope can lead to memory leaks or unexpected behavior:
@ActivityScope
@Provides
fun provideActivity(): MainActivity {
return MainActivity()
}
Be cautious of circular dependencies, which can result in crashes or runtime exceptions.
Make sure to consider the order of initialization, as some components may depend on others being initialized first.
Check that your component interfaces are correctly set up to expose the dependencies:
@Component
interface AppComponent {
fun inject(target: Target)
}
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?