我正在使用Dagger并且到目前为止它很好。我有一个模块用于所有视图(活动和片段),我通过对象图注入它们。现在我想要包含自定义视图,我的模块看起来像这样
@Module(
injects = {
//Activity
MainActivity.class,
//Fragments
LookupSearchResultsFragment.class,
// Views
MainSearchComponent.class
},
//includes = {
// PersistenceModule.class
//},
library = true,
complete = false,
addsTo = AndroidModule.class)
在我的MainSearchComponent中,我应该如何注入Object Graph?我目前正在这样做:
ObjectGraph.create((BaseActivity)getContext()).inject(this);
但是我收到了这个错误。 Caused by: java.lang.IllegalStateException: Module adapter for class ...MainActivity could not be loaded. Please ensure that code generation was run for this module.
答案 0 :(得分:1)
首先,您应该将@Module
- 带注释的类传递给ObjectGraph.create()
,而不是Activity
类。其次,您不应该在每次需要inject()
某事时创建图表。
通常的做法是将objectGraph
列为Application
类的字段。这就是你能得到的:
// Application class
objectGraph = ObjectGraph.create(new AndroidModule());
然后在Activity
的{{1}}:
onCreate()
并且不要忘记尽快清除对GC的本地图表的强烈参考:
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApp app = (MyApp) getApplication();
activityGraph = app.getObjectGraph().plus(new ActivityModule());
activityGraph.inject(this); // inject with respect of activity-specific components
}
答案 1 :(得分:0)
ObjectGraph.create((BaseActivity)getContext()).inject(this);
这让它发挥作用。
ObjectGraph.create(new AcitivityModule()).inject(this);