bsr*_*bsr 3 java android dependency-injection dagger
我从未尝试过Guide或其他DI库,但尝试使用Dagger from square for Android应用程序.它适用于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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
// POJO
public class Auth {
@Inject
RestAdapter restAdapater;
String Username;
String Password;
public String authenticate() {
...
Api api = restAdapater.create(..) // **restAdapater is null**
}
}
Run Code Online (Sandbox Code Playgroud)
所有碎片都来自下面,DI工作正常.在Eric Burke最近的一次演讲中,他解释说这是必要的,因为Android构建了对象.
public class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
((MyApplication) getActivity()
.getApplication())
.inject(this);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
如果您自己创建一个Auth实例,那么Dagger就不会知道这个实例,也无法为您注入依赖项.
由于您已经在Module entryPoints中声明了Auth.class,因此您只需要向ObjectGraph询问Auth实例:
Auth auth = objectGraph.get(Auth.class);
Run Code Online (Sandbox Code Playgroud)
然后Dagger会知道提供Auth实例需要什么,即将它注入RestAdapter.
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |