3

我在我的项目中使用 Roboguice 进行 DI。根据 android 文档,只能存在一个应用程序实例。但是由 OS 和 Roboguice 创建的实例是不同的。

如何强制 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()来代替的 Provider。这看起来像:

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

然后,您可以将其绑定到您的模块中,例如:bind(MyApplication.class).toProvider(MyAppProvider.class);

于 2013-05-02T21:42:21.047 回答