使用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对象添加到容器中?
答案 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();
}
}