RoboGuice getInjector альтернативный в РУКОЯТКЕ (Dagger2)

#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();
            }
    }