0

roboguice 什么时候@Inject可以为空?

我有课:

@Singleton
public class MyClass extends AnotherClass{ ...

在我使用的许多地方

@Inject private MyClass mMyClass;

它工作正常。

最近我从事件总线编写了简单的类处理事件。此类在主 ui 线程中创建和注册。在这堂课中,我的注射MyClass方式和其他地方一样,但现在是这样null

@Override
public void onCreate() {
    super.onCreate();
    ...
    mMyHandler = new MyHandler(this);
    mMyEventBus.register(mMyHandler);

public class MyHandler{
    private final Context mContext;

    public MyHandler(Context context){
        mContext = context;
    }

    @Inject private MyClass mMyClass;

    public void onEventBackgroundThread(MyEvent event) {
        mMyClass.someMethod; //mMyClass is null
        ...
    }
}

我正在使用 RoboGuice 2.0。

4

1 回答 1

3

RoboGuice 没有机会向您的MyHandler实例注入任何东西,因为您正在使用new它来创建它,而不是由您的 DI 框架创建它。我不熟悉 RoboGuice(只有普通的 Guice),但可能有一种方法可以让注入器在您自己创建实例后注入成员。虽然我认为最好重新构造代码,以便实例首先由 RoboGuice 创建。

于 2013-10-04T18:49:54.227 回答