在Roboguice 3中注入Android应用程序会产生重复

时间:2013-03-11 14:42:05

标签: android roboguice

使用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对象添加到容器中?

1 个答案:

答案 0 :(得分:1)

您需要为此创建一个Provider。在您的模块中,将您的类绑定到提供者:bind(MyApplication.class).toProvider(ApplicationProvider.class);

您的提供商应如下所示:(尚未测试代码)

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