Как работает AssistedInject для Dagger 2?
Библиотека AssitedInject от Square на самом деле представляет собой процессор аннотаций, который генерирует модули Dagger 2. Dagger 2 также является процессором аннотаций.
И, как я знаю, нет способа контролировать порядок выполнения процессоров.
В этом примере (см. Фрагмент ниже) вы можете видеть, что модуль зависит от сгенерированного классом AssistedInject AssistedInject_MainModule
, Так что в случае, если Dagger 2 будет запущен первым, сборка не удастся из-за этого AssistedInject_MainModule
не существует.
Но это может быть скомпилировано. Как это работает?
@AssistedModule
@Module(includes = AssistedInject_MainModule.class)
public abstract class MainModule {
@Provides static @Exclamation String provideExclamation() {
return "!";
}
}
1 ответ
И, как я знаю, нет способа контролировать порядок выполнения процессоров.
Я не смотрел на то, как Dagger 2 или AssistedInject работают под капотом, но в целом обработка аннотаций выполняется в несколько раундов.
Обработка аннотации происходит в последовательности раундов. В каждом раунде процессору может быть предложено обработать подмножество аннотаций, найденных в исходных файлах и файлах классов, созданных в предыдущем раунде.
Файлы генерируются во время этих раундов, но проверка (и ошибки) происходит в более позднем или последнем раунде, когда каждый файл был создан и обработан. Это также упоминается во втором ответе на вопрос, который вы связали. Кто-то также написал подробный ответ о том, как раунды работают по другому вопросу.