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 回答