roboguice如何注入自定义类

时间:2013-06-23 04:00:04

标签: android roboguice

您好我正在使用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;
}

1 个答案:

答案 0 :(得分:10)

在RoboActivity中注入自定义类

您可以使用@Inject注释注入自定义类,但注入的类必须满足以下条件的一个

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

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

public class CustomClass {

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

}

注意构造函数上的@Inject注释。每个参数的类也必须由RoboGuice注入。 RoboGuice提供了几种针对Android类的注入(例如Context)。 Injections provided by 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);
    }

}

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