3

私は自分のプロジェクトでDIにRoboguiceを使用しています。Androidのドキュメントによると、アプリケーションのインスタンスは1つしか存在できません。しかし、OSとRoboguiceによって作成されたインスタンスは異なります。

OSによって作成されたアプリケーションをRoboguiceに強制的に挿入し、新しいインスタンスの作成を無効にする方法は?

以下の状況を説明するいくつかのコード

public class MyApplication extends Application {

    public static MyApplication getInstance() {
        if (instance == null) {
            throw new IllegalStateException("Application isn't initialized yet!");
        }
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }
}

public class MyActivity extends RoboActivity {

    // roboApp and osApp two different objects but expected that roboApp the same as osApp        

    @Inject
    private MyApplication roboApp;

    private MyApplication osApp = MyApplication.getInstance();

}
4

1 に答える 1

1

RoboGuiceは電話をかけませんがMyApplication.getInstance()、代わりに電話をかけますnew MyApplication()

MyApplication.getInstance()代わりに呼び出すプロバイダーを作成できます。これは次のようになります。

 public MyAppProvider implements Provider<MyApplication> {
     @Override
     public MyApplication get() {
         return MyApplication.getInstance();
     }
 }

次に、これを次のようにモジュールにバインドできます。bind(MyApplication.class).toProvider(MyAppProvider.class);

于 2013-05-02T21:42:21.047 に答える