Hej,
próbuję wgryźć się w Dagger'a.
Czytałem na http://www.holdapp.com/pl/blog/android-small-talks-wstrzykiwanie-zaleznosci-poprzez-daggera-2 i nie jestem pewien czy to dobrze rozumiem...
Obowiązkowo muszę stworzyć własną klasę dziedziczącą po Application, która będzie wyglądała mniej więcej tak:
public class App extends Application {
private ApplicationComponent applicationComponent;
public ApplicationComponent getComponent() {
if (applicationComponent == null) {
applicationComponent = DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this))
.build();
}
return applicationComponent;
}
}
Do tego musimy stworzyć ApplicationModule np:
@Module
public class ApplicationModule {
protected final Application application;
public ApplicationModule(Application application) {
this.application = application;
}
@Provides
Application provideApplication() {
return application;
}
@Provides
Context provideContext() {
return application;
}
}
Czyli zawsze będziemy wstrzykiwali Context i Application?
@Singleton
@Component(modules = {ApplicationModule.class})
public interface ApplicationComponent {
void inject(MainActivity target);
}
To oznacza że tworzymy połączenie pomiędzy MainActivity a ApplicationModule wywołując to w taki sposób:
((App) getApplication()).getComponent().inject(this);
Jakbym chciał w MainActivity dołączyć Adapter (MyItemRecyclerViewAdapter) to co musiałbym zrobić?
W ApplicationComponent muszę dodać kolejny moduł? MyItemRecyclerViewModule.class a w nim:
@Module
public class MyItemRecyclerViewModule {
@Singleton
@Provides
public MyItemRecyclerViewAdapter provideRepo(List<DummyItem> items, OnListFragmentInteractionListener listener) {
return new MyItemRecyclerViewAdapter(items, listener);
}
}
i w MainActivity muszę zadeklarować:
@Inject MyItemRecyclerViewAdapter myItemRecyclerViewAdapter;
tylko jak przekazać List<DummyItem> i OnListFragmentInteractionListener?
Czy wystarczy że zadeklaruję np:
private OnListFragmentInteractionListener mListener;
private List<DummyItem> items;
??
Dzięki za zrozumienie tego 😉