Android Dagger,如何注入类而不是模块

Android Dagger,如何注入类而不是模块,android,dagger,Android,Dagger,根据JakeWharton的幻灯片97,对象图允许注入类。 然而,我确实尝试过,我得到了一个NPE,似乎从未调用过所述类的构造函数 我的代码如下。我对AppModule没有任何问题,它提供了AnalyticsManager public class App extends Application implements ModuleCreator { private ObjectGraph objectGraph; @Inject AnalyticsManager analyticsManager

根据JakeWharton的幻灯片97,对象图允许注入类。 然而,我确实尝试过,我得到了一个NPE,似乎从未调用过所述类的构造函数

我的代码如下。我对
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;
     }
}