In Dagger, we can pass the runtime parameter through component.builder. But how to achieve that in hilt where the Component is Built in?
public class ProgressData { private int percent; @Inject public ProgressData(int percent) { this.percent = percent; } public int getPercent() { return percent; } public void setPercent(int percent) { this.percent = percent; }
How to inject an object of ProgressData in the main activity while percent data is set in runtime?
Advertisement
Answer
I found the answer. First Annotate the constructor with @AssistedInject. then we have to annotate percent as @Assisted.
public class ProgressData { private int percent; @AssistedInject public ProgressData(@Assisted int percent) { this.percent = percent; } public int getPercent() { return percent; } public void setPercent(int percent) { this.percent = percent; } }
Then to provide value for percent we have to create a factory interface where we can pass all dependent variables. we have to annotate it with @AssistedFactory. Hilt will implement it internally.
@AssistedFactory public interface ProgressDataFactory{ ProgressData create(int percent); }
Then from Activity or where we want we have to Inject the ProgressDataFactory .then we can call create function.
@Inject ProgressDataFactory progressDataFactory; progressData=progressDataFactory.create(10);