RoboGuice @Inject 注释有效,但 getInjector(this).getInstance() 抛出 ConfigurationException

RoboGuice @Inject annotation works, but getInjector(this).getInstance() throws ConfigurationException

在派生自 RoboActivity 的 Activity 上,我可以添加一个带有 @Inject 注释的成员,该注释在调用 super.onCreate() 之后填充onCreate();但是,如果我删除该字段并尝试从方法中检索相同类型的对象,RoboGuice 会抛出 ConfigurationException.

有效的示例代码:

public class MyActivity extends RoboActivity { 
    @Inject private MyType instance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // instance is set 
    }   
}

然而,这个例子不起作用:

public class MyActivity extends RoboActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        doStuffThatCalls_getMyType_Eventually();
    }

    protected MyType getMyType() {
        // Exception thrown here
        return RoboGuice
                .getInjector(this)
                .getInstance(MyType.class);
    }
}

此外,如果我添加该字段,那么我就可以像以前一样使用 getInstance()

public class MyActivity extends RoboActivity {

    @Inject
    private MyType instance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        doStuffThatCalls_getMyType_Eventually();
    }

    protected MyType getMyType() {
        // This now works (of course, returns different instance of 'MyType')
        return RoboGuice
                .getInjector(this)
                .getInstance(MyType.class);
    }
}

我需要使用第二个示例,以便派生 类 可以 return MyType 的不同实例,并且不想离开该字段,因为它可能是错误的以后用。

如何使用 RoboGuice?

当 class 从未通过注释注入时,RoboGuice 认为 class 未绑定并忽略绑定。
要强制绑定,您需要在模块中使用 superbind 而不是简单的 bind

public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        superbind(MyType.class).to(MyTypeImpl.class);
    }
}

来源:RoboBlender wiki