- Developer's Commute
- Posts
- Quick Question: Do you understand Dagger Hilt? - Developer's Commute
Quick Question: Do you understand Dagger Hilt? - Developer's Commute
Here is everything you want to know about Dagger Hilt
Android Core Concept
Android Interview Huh?
If your interviewer asks " Explain Dagger Hilt? "
Here is how you do it:
What is Dagger Hilt?
Dagger Hilt is another library that allows us to implement Dependency Injection
Dagger Hilt is easier than Dagger 2
The hilt is just a wrapper around Dagger 2
For now, it has become a standard way to implement DI
Behind the scenes, it generates Dagger code
Knowing about Dagger 2 will make it easier to understand, But you don't necessarily need it
Why is it needed?
Simply because Dagger 2 has a lot of methods and implementations
Hilt just streamlines it
To implement Hilt inside your app
You need to add dependencies and some plugins like Kotlin-Kapt
Kapt -> Kotlin Annotation Processing Tool
Dagger works similarly to Dagger 2 with Annotations
How does Dagger Hilt streamline Dagger 2?
Annotations provided by Hilt are standardized
You don't need to implement your own annotations like in the case of Dagger 2
These standard annotations form a layer on top of other annotations
Therefore one annotation acts as the parent of another and it becomes its sub-annotations that inherit from the parent
To understand more pls refer to the documentation
What is @ HiltAndroidApp ?
This annotation is always placed in the application class (application Context)
Other annotations take the application context from this annotation
It simply generates the Dagger code behind the scenes
What is @ AndroidEntryPoint?
This annotation will be on top of your main activity
It tells Dagger about the Entry point of the injections
It simply tells us where the dependency needs to be injected
An important thing to remember is if you use @ AndroidEntryPoint on a class
And if other classes depend on that class
Those classes also need to have @ AndroidEntryPoint
What is @ Inject?
In order to give a dependency to AndroidEntryPoint (of Repository, services etc.)
We use @ Inject
It simply means in order to construct this object please run his constructor
What is @ Module?
Suppose you want to access an object that is using a third-party service (Like calling API from Retrofit)
Hilt does not know how to create that object because it does not have any @ Inject constructor
Here comes the usage of @ Module
It tells us how to create that third-party object
We use @ Provides to create a third-party object (Like this retrofit call)
Now what is InstallIn(SingletonCompoenent::Class)?
Here is where Hilt shines over Dagger 2
Remember there were many components in Dagger 2
Now these components are layered on top of each other making it easier to access
We need to provide Singleton because we need to tell Dagger to please not make the same object again and again
When activities are created or destroyed
Because it will become expensive (especially in the case of Retrofit call)
Therefore we use Singleton which allows us to restrict object creation
Singelton Component is applicable in the Application Context
We can also create an Activitycompoenent or fragment Component if we need to
How does the hilt work in this case?
First, it checks if is there any @ Inject constructor to build the object - NO
Secondly goes to the activity component is there any @ provides
here - NO
Thirdly goes to the activity retained component are there any @ provides - No
Fourthly goes to the Singelton component - Here he finds the @ provides
Constructs the object and injects it where it is needed