Android Dagger,如何注入类而不是模块
根据JakeWharton的幻灯片97,对象图允许注入类。 然而,我确实尝试过,我得到了一个NPE,似乎从未调用过所述类的构造函数 我的代码如下。我对Android Dagger,如何注入类而不是模块,android,dagger,Android,Dagger,根据JakeWharton的幻灯片97,对象图允许注入类。 然而,我确实尝试过,我得到了一个NPE,似乎从未调用过所述类的构造函数 我的代码如下。我对AppModule没有任何问题,它提供了AnalyticsManager public class App extends Application implements ModuleCreator { private ObjectGraph objectGraph; @Inject AnalyticsManager analyticsManager
AppModule
没有任何问题,它提供了AnalyticsManager
public class App extends Application implements ModuleCreator {
private ObjectGraph objectGraph;
@Inject
AnalyticsManager analyticsManager;
@Override
public void onCreate(){
super.onCreate();
objectGraph = ObjectGraph.create(getModules().toArray());
objectGraph.inject(RealBusEvent.class);
objectGraph.inject(Trip.class);
objectGraph.inject(this);
analyticsManager.registerAppEnter();
}
public List<Object> getModules() {
return Arrays.<Object>asList(new AppModule(this));
}
}
使用RealEventBus
的类如下所示:
public class MyActivity extends Activity {
@Inject RealBusEvent event;
TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
mTextView = (TextView) findViewById(R.id.txtView);
Button button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mTextView.setText(String.valueOf(event.getTrip().getTime()));
}
});
}
}
I对象事件
始终为空。我遗漏了什么吗?
谢谢。对于每个需要执行
@Inject
的类,您必须调用:objectGraph.Inject(this)代码>通常将其放入构造函数中,如下所示:
public class RealBusEvent {
@Inject Trip trip;
@Inject
public RealBusEvent(){
YOU_OBJECTGRAPH_REFERENCE.inject(this);
}
public Trip getTrip() {
return trip;
}
}
主要的挑战是“如果您没有“上下文”,如何获取您的OBJECTGRAPH\u引用”。为此,您可以通过单例访问ObjectGraph
,这不是很优雅,但有时如果无法传递上下文
,它是唯一的选择
但是如果您确实有一个上下文
,您可以按照此链接上的示例进行操作:
请参见他们如何使对象图
(在演示应用程序
中定义)可从演示活动
访问
public class RealBusEvent {
@Inject Trip trip;
@Inject
public RealBusEvent(){
YOU_OBJECTGRAPH_REFERENCE.inject(this);
}
public Trip getTrip() {
return trip;
}
}