У меня есть проект с двумя вариантами: «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
}
Этот подход работает, но я действительно не уверен, как подходит это особенно для сложных проектов. Есть ли лучший подход к этому? Я надеюсь, что я не слишком общий. Спасибо!