2013-03-11 37 views
0

當使用Roboguice 3,我可以看到它的表現比2的版本不同。當我有自定義應用程序對象:在Roboguice 3注漿Android應用程序創建重複

public class MyApplication extends Application 
{ 
    ... 
} 

然後在另一個類:

@Inject 
private MyApplication app; 

此代碼注入另一個MyApplication對象,而不是在應用程序啓動期間創建的對象。 (凡在Roboguice2不是這種情況)

綁定:

public class InjectionModule extends AbstractModule 
{ 
    @Override 
    protected void configure() 
    { 
     bind(MyApplication.class).in(Singleton.class); 
    } 
} 

不會改變此行爲。

如何將全局MyApplication對象添加到容器?

回答

1

您需要爲此創建一個提供程序。在您模塊的類綁定到提供者:bind(MyApplication.class).toProvider(ApplicationProvider.class);

你的供應商應該看起來像如下:(沒有測試的代碼)

public class ApplicationProvider implements Provider<MyApplication> { 
    @Inject 
    Context context; 
    @Override 
    public MyApplication get() { 
     return (MyApplication) context.getApplicationContext(); 
    } 
} 
+0

沒有測試過,但我認爲它只是移動問題的上下文類。我應該將MyApplication綁定到上下文嗎? – 2013-10-09 13:30:42

+0

否因爲Context在RoboGuice中有一個默認綁定,所以您的自定義應用程序類沒有。所以上下文會自動工作... – Jeroen 2013-10-11 02:23:25