2015-07-21 50 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

工作就像一個魅力。 –