#android #dependency-injection #migration #roboguice #dagger-hilt
#Android #внедрение зависимостей #миграция #roboguice #рукоять кинжала
Вопрос:
Я нахожусь в процессе перехода на HILT из RoboGuice в моем текущем приложении, есть много мест, где инъекция в RoboGuice выполняется следующим образом:
IHelper helper = RoboGuice.getInjector(getApplicationContext()).getInstance(IHelper.class);
Доза HILT поддерживает этот вид инъекции, насколько мне известно, HILT выполняет только инъекцию поля и метода. И поправьте меня, если я ошибаюсь, внедрение поля работает только в том случае, если у меня объявлена аннотация @AndroidEntryPoint (это означает, что класс должен соответствовать классам, одобренным @AndroidEntryPoint)
Комментарии:
1. Проверьте
@EntryPoint
документ Hilt .2. Если у вас все получилось, вы можете добавить ответ ниже.
Ответ №1:
Я разобрался с этим благодаря предложению @ADM, вот как это работает для меня. Рад видеть, есть ли у кого-нибудь предложения по улучшению.
public class MyDialogFragment extends DialogFragment {
//create interface inside the class where you want to inject
@EntryPoint
@InstallIn(ApplicationComponent.class)
interface MyDialogFragmentEntryPoint {
public IHelper helper();
}
protected IHelper mHelper
public void anyMethod() {
//declare object of the Entry Point we declare
MyDialogFragmentEntryPoint dialogFragmentEntryPoint = EntryPointAccessors.fromApplication(this._context.getApplication(), MyDialogFragmentEntryPoint.class);
//You can get the instance of helper
mHelper = dialogFragmentEntryPoint.helper();
}
}