Ho un'applicazione Android e sto cercando di usare il pugnale. Ho deciso di utilizzare un grafico globale + grafici di attività. Ho tre moduli:Grafico di attività del pugnale e moduli separati
AndroidModule
@Module(library = true)
public class AndroidModule {
private final MApplication mApplication;
public AndroidModule(MyApplication application) {
mApplication = application;
}
@Provides @Singleton @ForApplication Context provideApplicationContext() {
return mApplication;
}
}
MyAppModules
@Module(
injects = {
MainActivity.class,
AddFragment.class,
AddMapFragment.class,
MyActivity.class,
ListFragment.class,
MyMapFragment.class,
RetainFragment.class,
SingleActivity.class,
UserActivity.class,
UserLoginFragment.class,
UserProfileActivity.class,
UserProfileFragment.class,
UserRegisterFragment.class,
WelcomeFragment.class
},
complete = false,
library = true,
includes = ActivityModule.class
)
public class MyAppModule {
private final Bus mBus = new Bus();
@Provides @Singleton Bus provideBus() {
return mBus;
}
@Provides @Singleton
RequestQueue provideRequestQueue(@ForApplication Context context) {
return Volley.newRequestQueue(context);
}
@Provides @Singleton Api provideApi(RequestQueue queue) {
return new AppApi(queue);
}
@Provides Logger provideLogger() {
return new MyLogger();
}
}
ActivityModule
@Module(
complete = false,
library = true
)
public class ActivityModule {
private BaseActivity mActivity;
public ActivityModule() {}
public ActivityModule(BaseActivity activity) {
mActivity = activity;
}
@Provides @Singleton @ForActivity Context provideActivityContext() {
return mActivity;
}
@Provides @Singleton LocationClientFactory provideLocationClientFactory() {
return new LocationClientFactory(mActivity);
}
}
ho dovuto usare includere MyAppModule
per il ActivityModule
, senza di essa, l'applicazione si è schiantato dicendo che potrebbe trovare un costruttore su Context
e non è stato possibile iniettare Context
Activity
.
Il grafico è configurato correttamente? Sto aggiungendo i moduli al grafico nel numero Application
e in un BaseActivity
e ho pensato che fosse sufficiente e non avevo bisogno dell'inserimento, ma non sono sicuro di comprendere appieno il processo di configurazione di questo.
Modifica
Ti piace questa, pugnale dà nessun errore, ma se provo a iniettare un Activity
Context
, in fase di esecuzione E 'null
.
Questo perché (se si utilizza il campione [Grafici attività] (https://github.com/square/dagger/tree/master/examples/android-activity-graphs)) il grafico dell'oggetto dell'attività è la cosa che 'addedTo' MyAppModule. Inoltre, se stai facendo 'include' del tuo modulo di attività, sono abbastanza sicuro che una parte del grafico sia costruita prima di volerlo, cioè quando l'attività è attiva solo. –
Quindi controlla come risposta – Caipivara
Ehi @alex, puoi inserire qui esattamente come hai creato i grafici nelle classi di Applicazione e Attività? – bogdan