Guideやその他のDIライブラリを試したことはありませんが、AndroidアプリケーションにsquareのDaggerを使用しようとしています。Frgementsには最適ですが、POJOには有効ではありません。ユーザーガイドは、詳細に説明されていないため、DIに関するある程度の知識があることを前提としています。restAdapater
POJOに注入するにはどうすればよいですか。同じコードでフィールドインジェクションを行うと、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**
}
}
すべてのフラグメントは以下から派生しており、DIはそれらで正常に機能します。Eric burkeによる最近の講演で、Androidがオブジェクトを構築するため、これが必要であると説明しています。
public class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
((MyApplication) getActivity()
.getApplication())
.inject(this);
}
}