java – Dagger:POJO中的场注入
发布时间:2020-12-15 08:50:04 所属栏目:Java 来源:网络整理
导读:我从未尝试过Guide或其他DI库,但尝试使用Dagger from square for Android应用程序.它适用于Frgements,但不适用于POJO. user guide假设有关DI的一些知识,因为它没有更详细地解释.我该怎么做才能将restAdapater注入我的POJO.如果我使用相同的代码进行字段注入,
我从未尝试过Guide或其他DI库,但尝试使用Dagger from square for
Android应用程序.它适用于Frgements,但不适用于POJO.
user guide假设有关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工作正常.在最近的talk by Eric burke中,他解释说这是必要的,因为Android构造了对象. public class BaseFragment extends Fragment { @Override public void onCreate(Bundle state) { super.onCreate(state); ((MyApplication) getActivity() .getApplication()) .inject(this); } } 解决方法
如果您自己创建一个Auth实例,那么Dagger就不会知道这个实例,也无法为您注入依赖项.
由于您已经在Module entryPoints中声明了Auth.class,因此您只需要向ObjectGraph询问Auth实例: Auth auth = objectGraph.get(Auth.class); 然后Dagger知道提供Auth实例需要什么,即将它注入RestAdapter. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |