Зависимости Dagger 2 в неактивных классах - PullRequest
0 голосов
/ 12 сентября 2018

Таким образом, существует множество учебных пособий, в которых показано, как добавить зависимость в класс действия с помощью Dagger 2. Но по какой-то причине зависимости никогда не вставляются в классы, которые не являются действиями / фрагментами / службами. Я хотел бы знать, как вставить зависимости в обычный класс.

Сейчас я пытаюсь вставить кинжал в поле, но поле остается пустым. Я предполагаю, что ошибка в том, что я не говорю кинжалу делать инъекцию. Но я не уверен, как решить эту проблему.

@Module
public class TestModule {
    @Provides 
    @Singleton
    String provideTestString() {
        return "test string";
    }
}
@Singleton
@Component(modules = { TestModule.class })
public interface TestComponent {
    void inject(TestClass testClass);
    String getTestString();
}
class TestClass {
    @Inject
    String testString;

    public boolean isTestStringNull() {
        return testString == null;
    }
}
Log.d("---", "is test string null: " + new TestClass().isTestStringNull());//is true

Хотя я могу вызывать DaggerTestComponent.create () в подклассе Application, он не будет доступен внутри случайных классов, которые не знают о Application. Так как правильно получить кинжал для инициализации моего поля?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Каждое приложение имеет вход.Таким образом, вместо Application вы можете использовать некоторый класс верхнего уровня.Подход аналогичен подходу с Activity или даже более прост, поскольку вы можете передавать необходимые классы в конструктор.

0 голосов
/ 12 сентября 2018
class TestClass {
    @Inject
    String testString;

    @Inject
    TestClass() {}
}

@Singleton
@Component(modules = { TestModule.class })
public interface TestComponent {
    TestClass testClass();

    String testString();
}

Log.d("---", "is test string null: " + component.testClass().isTestStringNull());//is false
...