0

Roboguice 3 を使用すると、バージョン 2 とは動作が異なることがわかります。カスタム Application オブジェクトがある場合:

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 オブジェクトをコンテナーに追加するにはどうすればよいですか?

4

1 に答える 1

1

そのためのプロバイダーを作成する必要があります。モジュールで、クラスをプロバイダーにバインドします。bind(MyApplication.class).toProvider(ApplicationProvider.class);

プロバイダは次のようになります: (コードはテストしていません)

public class ApplicationProvider implements Provider<MyApplication> {
    @Inject 
    Context context;
    @Override
    public MyApplication get() {
         return (MyApplication) context.getApplicationContext();
    }
 }
于 2013-05-02T21:24:33.707 に答える