Я просто играю, пытаясь узнать Dagger2 немного лучше. Я нашел в Интернете простой пример, где Bar
зависит от BarDatabase
:
public class Bar {
// Bar depends on BarDatabase
private BarDatabase db;
@Inject
public Bar(BarDatabase db) {
this.db = db;
}
public BarDatabase getBar() { return db; }
public Cocktail getCocktail(String name) {
String row = db.getCocktail(name);
return new Cocktail(row);
}
}
Dagger отлично работает со следующими модулями и компонентами:
package com.example.eflatt.di.barcomponent;
import com.example.eflatt.di.Bar;
import com.example.eflatt.di.module.BarModule;
import com.example.eflatt.di.testmodule.TestBarModule;
import javax.inject.Singleton;
import dagger.Component;
/**
* Created by eflatt on 4/26/16.
*/
@Singleton
@Component(modules = {BarModule.class, TestBarModule.class})
public interface BarComponent {
public Bar provideBar();
}
package com.example.eflatt.di.module;
import com.example.eflatt.di.Bar;
import com.example.eflatt.di.BarDatabase;
import com.example.eflatt.di.MockBarDatabase;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
/**
* Created by eflatt on 4/26/16.
*/
@Module
public class BarModule {
@Provides @Singleton
public Bar provideBar () {
return new Bar(new BarDatabase());
}
}
Но я хотел попробовать внедрить MockBarDatabase() в свой модульный тест, когда все пошло не так.
Вопрос 1: Я решил написать TestBarModule, который создал MockBarDatabase() в методе ProvideBar (отдельный файл с именем TestBarModule) — это неправильный метод?
@Module
public class TestBarModule {
@Provides @Singleton
public Bar provideBar () {
return new Bar(new MockBarDatabase());
}
}
Вопрос 2: Если написание отдельного модуля для обработки Mock-кейса является правильным решением (я предполагаю, что это не так), то как мне справиться с тем фактом, что моя IDE говорит мне:
Ошибка: (15, 16) ошибка: com.example.eflatt.di.Bar привязан несколько раз: @Provides @Singleton com.example.eflatt.di.Bar com.example.eflatt.di.module.BarModule.provideBar( ) @Provides @Singleton com.example.eflatt.di.Bar com.example.eflatt.di.testmodule.TestBarModule.provideBar()