Java – dagger: field injection in POJO
I've never tried guide or other Di libraries, but I've tried to use the dagger from square for Android application It applies to frgements, but not POJO User guide assumes some knowledge about Di because it is not explained in more detail What can I do to inject restadapater into my POJO If I use the same code for field injection, it can be used in fragment
public class MyApplication extends Application {
private ObjectGraph objectGraph;
@Override
public void onCreate() {
super.onCreate();
objectGraph = ObjectGraph.create(new DIModule(this));
}
public ObjectGraph objectGraph() {
return objectGraph;
}
public void inject(Object object) {
objectGraph.inject(object);
}
...
@Module(entryPoints = {
MainActivity.class,.....,Auth.class,RestAdapter.class
})
static class DIModule {@Provides
@Singleton
public RestAdapter provideRestAdapter() {
return new RestAdapter.Builder().setServer(
new Server(Const.BASE_URL)).build();
}
}
}
// POJO
public class Auth {
@Inject
RestAdapter restAdapater;
String Username;
String Password;
public String authenticate() {
...
Api api = restAdapater.create(..) // **restAdapater is null**
}
}
All fragments come from below and di works normally In a recent talk by Eric Burke, he explained that this is necessary because Android constructs objects
public class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
((MyApplication) getActivity()
.getApplication())
.inject(this);
}
}
Solution
If you create an auth instance yourself, dagger will not know the instance and cannot inject dependencies for you
Because you have declared Auth in module entrypoints Class, so you only need to ask objectgraph for an auth instance:
Auth auth = objectGraph.get(Auth.class);
Then dagger knows what it needs to provide an auth instance and injects it into restadapter
