【问题标题】:Problems with injecting an object using Roboguice in an Android Application在 Android 应用程序中使用 Roboguice 注入对象的问题
【发布时间】:2014-08-26 05:01:13
【问题描述】:

我在使用 roboguice 将模块注入我的班级时遇到问题。我将 roboguice_modules.xml 添加到 src/main/res/values

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string-array name="roboguice_modules">
     <item>com.androidclient.guice.BindingModule</item>
   </string-array>
</resources>

我的 BindingModule 看起来像这样

public class BindingModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(FooIf.class).to(FooImpl.class);
    }
}

这就是我将 FooImpl 注入我的班级的方式

@Inject  
FooIf foo;

知道我在这里做错了什么吗?

【问题讨论】:

    标签: java android roboguice


    【解决方案1】:

    您的 MainActivity 必须扩展 RoboFragmentActivity 没有 FragmentActivity 。然后所有使用注入的类都必须扩展 Roboguice 库的某个类,因为当发生魔法时,即:RoboFragment、RoboActivity、RoboAsyncTask、RoboBroadcastReceiver 等。注入发生在 onCreate 方法上的 setContentView 方法之后,在调用方法之后,你的变量被注入。

    您可以使用此代码:

    public class MainActivity extends RoboFragmentActivity 
    {
        @Inject  
        FooIf foo;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);
    
            //Here you can use foo variable
        }
     }
    

    【讨论】:

    • 这是不正确的。您不必扩展 Robo* 类。您可以自己显式触发注入。
    • 您可以请求 RoboGuice.getInjector(context).getInstance(Class) 来检索注入的实例。但是在这种情况下@anonymous123,想在FragmentActivity类上注入一个字段,不需要调用RoboGuice.getInjector(this).injectMembers(this),只需扩展RoboFragmentActivity,否则Inject属性不存在。
    • 我仍然认为应该更改您答案的措辞。您“必须”扩展这些类是不正确的。这只是一种选择。而且它不是一个很好的方法,因为它引入了对这些基类的硬依赖。
    • 好吧,@EJK,那么 Roboguice 上的注入基类和注入注解都没用了?最后,所有这些类都扩展了原来的类,RoboFragmentActivity扩展了FragmentActivity,RoboActivity扩展了Activity等。定义“硬依赖”,因为,我不能从Activity、FragmentActivity等继承,它不是“硬依赖”。
    • 你错过了我原来的观点。只是说您“必须”扩展这些类的答案是不正确的。这只是一种选择...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多