Dagger2: Как вы вводите компоненты на основе варианта сборки? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть проект с двумя вариантами: «mock» и «prod». Аромат «mock» содержит насмешливые версии соответствующих компонентов в аромате «prod». Теперь предположим, что у меня есть следующие компоненты:

public interface DataRepository {
    // interface methods here
}

class MyDataRepository implements DataRepository {
    // Production component
}

class MockDataRepository implements DataRepository {
    // Mocked component
}

Мой текущий подход заключается в создании модуля кинжала " DataRepositoryModule.class " для каждого исходного набора, который обеспечивает соответствующую реализацию DataRepository . И в «основном» исходном наборе я создаю компонент Dagger, который ссылается на « DataRepositoryModule.class » следующим образом:

 @Module
class DataRepositoryModule{
    // Located in the "prod" source set
    @Provides
    DataRepository providesDataRepository(){
        return new MyDataRepository();
    }
}

@Module
class DataRepositoryModule{
    // Located in the "mock" source set
    @Provides
    DataRepository providesDataRepository(){
        return new MockDataRepository();
    }
}

@Component(modules = DataRepositoryModule.class)
interface AppComponent{
    // Located in the "main" source set

    // component injection methods here
}

Этот подход работает, но я действительно не уверен, как подходит это особенно для сложных проектов. Есть ли лучший подход к этому? Я надеюсь, что я не слишком общий. Спасибо!

...