您好我正在使用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;
}
答案 0 :(得分:10)
您可以使用@Inject
注释注入自定义类,但注入的类必须满足以下条件的一个:
最简单的方法显然是使用默认构造函数。 如果必须在构造函数中包含参数,则必须注入:
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
传递给构造函数才能获取进样器。