@Module
public class RestModule {
// ...
public RestModule(@NonNull RestSettings restSettings) {
RestModule - это инстанцируемый модуль без видимого конструктора без параметров.Кинжал не знает, как создать его экземпляр.Вам нужно будет предоставить метод типа Builder restModule(RestModule restModule)
в @ Component.Builder и вызывать его во время создания, как ваши @BindsInstance
методы.
Каждая зависимость модуля, которую Dagger не может создать самостоятельно(например, модуль не имеет видимого конструктора без аргументов) должен иметь метод абстрактного сеттера.Другие зависимости модуля (те, которые Dagger может создать) разрешены, но не обязательны.(из @Component.Builder javadoc )
Не все Модули могут быть созданы;некоторые являются интерфейсами или абстрактными классами.Поскольку Dagger вызывает статические методы статически и отражает методы @Binds
во время компиляции, многие модули вообще не нуждаются в создании экземпляров.Это часто более оптимально, поскольку Dagger может пропустить создание экземпляра.
Для модулей, которые создаются, но имеют видимые конструкторы с нулевым аргументом, Dagger может автоматически вызывать new
, и вы можете оставить эти модули вне Builder,(Вы можете включить их; они не нуждаются в вызове, но могут быть полезны, если вы подклассируете модули, , с которыми все равно советуют документы .)
Для модулей, которыеинстанцируемый, но имеющий только конструкторы с аргументами, Dagger не может создавать модули;он не будет предоставлять конструктору аргументы из графа, как это делается с @Provides
методами.Вам нужно будет явно создать метод Builder и вызывать его с экземпляром модуля, который вы создаете сами.