Если вы не хотите внедрять такие интерфейсы, вам нужно создать @Module с аннотированным методом @Binds, например, таким:
@Module
abstract class UrlModule {
@Binds
abstract UrlsSource bindUrlsSource(LocalUrlsSource source);
}
И тогда вы создадите компонент, который использует этот модуль идобавьте в свою деятельность.
@Component(modules = {UrlModule.class})
@Singleton
public interface AppComponent {
void inject(MainActivity activity);
}
Затем запустите компонент в своем классе Application.java, извлеките его из своей деятельности и вызовите inject (), например, так:
public final class MainApplication extends Application {
private static AppComponent appComponent;
public static AppComponent getAppComponent() {
return appComponent;
}
private static AppComponent createAppComponent(Application application) {
return DaggerAppComponent.create();
}
@Override
public void onCreate() {
super.onCreate();
appComponent = createAppComponent(this);
}
}
Затем вы вводите зависимость следующим образом.
public class MainActivity extends Activity implements MainPresenter.View {
@Inject
UrlsRepository urlsRepository;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Injects this activity.
MainApplication.getAppComponent().inject(this);
}
}