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

时间:2015-07-21 17:51:37

标签: android roboguice

在源自RoboActivity的活动中,我可以添加一个@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);
    }
}

我需要使用第二个示例,以便派生类可以返回MyType的不同实例,并且不希望离开该字段,因为它可能在将来被错误地使用。

我怎样才能像这样使用RoboGuice?

1 个答案:

答案 0 :(得分:0)

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

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

来源:RoboBlender wiki