Как работает AssistedInject для Dagger 2? - PullRequest
0 голосов
/ 16 декабря 2018

Библиотека 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 Ответ

0 голосов
/ 16 декабря 2018

И, как я знаю, нет способа контролировать порядок выполнения процессоров.

Я не смотрел, как Dagger 2 или AssistedInject работают под капотом, но в целомОбработка аннотации выполняется в несколько раундов .

Обработка аннотации происходит в последовательности раундов.В каждом раунде обработчику может быть предложено обработать подмножество аннотаций, найденных в исходных файлах и файлах классов, созданных в предыдущем раунде.

Файлы генерируются во время этих раундов, но проверка (и ошибки)) происходит в последнем или последнем раунде, когда каждый файл был сгенерирован и обработан.Это также упоминается в втором ответе на вопрос, который вы связали.Кто-то также написал подробный ответ о , как работают раунды по другому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...