2015-07-21 49 views
0

对于派生自RoboActivity的活动,我可以添加一个@Inject注释,该注释在调用super.onCreate()后调用onCreate();但是,如果我删除该字段并尝试从方法内检索相同类型的对象,则RoboGuice将抛出一个ConfigurationExceptionRoboGuice @Inject注释起作用,但getInjector(this).getInstance()抛出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); 
    } 
} 

我需要使用第二个示例,以便派生类可以返回不同的ins因为它可能在将来被错误地使用,所以不想离开该领域。

我该如何使用RoboGuice?

回答

0

当一个类从未通过注解注入时,RoboGuice认为该类未被绑定并且忽略该绑定。
要强制绑定,你需要你的模块中使用superbind,而不是简单的bind

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

来源:RoboBlender wiki

+0

工作就像一个魅力。 –