gpt4 book ai didi

java - Dagger:POJO 中的字段注入(inject)

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:29 24 4
gpt4 key购买 nike

我从未尝试过 Guide 或其他 DI 库,但尝试将 Square 中的 Dagger 用于 Android 应用程序。它适用于 Frgements,但不适用于 POJO。 user guide假定您对 DI 有一定的了解,因为它没有更详细地解释。我应该怎么做才能将 restAdapater 注入(inject)我的 POJO。如果我使用相同的代码进行字段注入(inject),它可以在 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**

}
}

所有的 fragment 都是从下面派生的,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 不会知道这个实例,也无法为您注入(inject)依赖项。

因为你已经在 Module entryPoints 中声明了 Auth.class,你只需要向 ObjectGraph 请求 Auth 实例:

Auth auth = objectGraph.get(Auth.class);

然后 Dagger 会知道提供 Auth 实例需要什么,即用你的 RestAdapter 注入(inject)它。

关于java - Dagger:POJO 中的字段注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14594957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com