5

嗨,正如我们所知,我目前正在使用 roboguice,我们可以使用注释来注入类,例如

@InjectView(R.id.list)ListView x

@inject 表示法有效,因为我从 RoboActivity 或任何 Robo 类扩展

我的问题是如果我想注入一个自定义类,称为

public class CustomUtilManager {
}

我希望能够在说 RoboActivity 中注入它

@Inject CustomUtilMananger

我该怎么做?

我的第二个问题是,如果我有一个类,那不是任何 Robo* 类的子类

public class MyOwnClass {
}

我如何获取注入器并注入另一个可注入类,例如 CustomUtilManager

即我怎么说

public class MyOwnClass {
    @Inject CustomUtilManager customUtilManager;
}
4

1 回答 1

10

在 RoboActivity 中注入自定义类

您可以简单地使用@Inject注解注入自定义类,但注入的类必须满足以下条件之一:

  • 自定义类有一个默认构造函数(没有参数)
  • 自定义类有一个注入的构造函数。
  • 自定义类有一个Provider来处理实例化(更复杂)

最简单的方法显然是使用默认构造函数。如果您的构造函数中必须有参数,则必须将其注入:

public class CustomClass {

    @Inject
    public CustomClass(Context context, Other other) {
        ...
    }

}

注意@Inject构造函数上的注释。每个参数的类也必须能够被 RoboGuice 注入。RoboGuice 开箱即用地为 Android 类提供了几种注入(例如Context)。RoboGuice 提供的注射剂

自定义类中注入

如果您使用 RoboGuice 创建自定义类的实例(例如使用@Inject注释),则所有标记为的字段@Inject都将自动注入。

如果要使用new CustomClass(),则必须自己进行注入:

public class CustomClass {

    @Inject
    Other other;

    Foo foo;

    public CustomClass(Context context) {
        final RoboInjector injector = RoboGuice.getInjector(context);

        // This will inject all fields marked with the @Inject annotation
        injector.injectMembersWithoutViews(this);

        // This will create an instance of Foo
        foo = injector.getInstance(Foo.class);
    }

}

请注意,您必须将 a 传递Context给您的构造函数才能获取注入器。

于 2013-06-28T22:46:52.270 回答