Java 带roboguice的构造函数注入进入有限循环
大家好,我来自C#/.NET的背景,已经学会了使用一些Android。现在我是wana,开始创建一个有趣的小应用程序,我想学习一个IoC框架。经过一点谷歌搜索,我发现了roboguice。但我不知道如何集成它。继续 NET我与Ninject和Unity合作过,我希望创建一种类似于我从这些框架中获得的构造函数注入形式 以下是我到目前为止所了解的情况,以及我认为我已经了解到的情况: 此类表示应用程序引导程序,我将在此处注册依赖项配置类:Java 带roboguice的构造函数注入进入有限循环,java,android,roboguice,Java,Android,Roboguice,大家好,我来自C#/.NET的背景,已经学会了使用一些Android。现在我是wana,开始创建一个有趣的小应用程序,我想学习一个IoC框架。经过一点谷歌搜索,我发现了roboguice。但我不知道如何集成它。继续 NET我与Ninject和Unity合作过,我希望创建一种类似于我从这些框架中获得的构造函数注入形式 以下是我到目前为止所了解的情况,以及我认为我已经了解到的情况: 此类表示应用程序引导程序,我将在此处注册依赖项配置类: public class IOCApplication ext
public class IOCApplication extends Application{
@Override
public void onCreate(){
super.onCreate();
RoboGuice.setBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE, RoboGuice.newDefaultRoboModule(this), new IOCModule());
}
public class IOCModule implements Module{
@Override
public void configure(com.google.inject.Binder binder) {
binder.bind(ITest.class).to(Test.class);
}
}
}
这是依赖项配置类:
public class IOCApplication extends Application{
@Override
public void onCreate(){
super.onCreate();
RoboGuice.setBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE, RoboGuice.newDefaultRoboModule(this), new IOCModule());
}
public class IOCModule implements Module{
@Override
public void configure(com.google.inject.Binder binder) {
binder.bind(ITest.class).to(Test.class);
}
}
在我的AndroidManifest中,我添加了以下内容:
<application ... android:name="com.example.project2.IOCApplication">
当我试着在我的android设备上运行这个程序时,它看起来像是进入了一个无限循环,我认为ITest-get并没有被实例化
我做错了什么?使用Android需要知道的一件事是,你没有实例化你自己的活动,,是系统做的 因此,不能对活动使用构造函数注入。 但是,您可以使用属性注入,这在IMO中是比较干净的 扩展
RoboActivity
类是将注入与活动一起使用的最简单方法。
RoboGuice为其他Android组件提供了类似的类(RoboFragment
,RoboService
,等等)
所有带有@Inject
的属性将在super.onCreate(savedInstanceState)之后实例化代码>被调用
使用POJO(普通旧Java对象),您有更多选项:
属性注入
构造函数注入
请注意,如果构造函数有参数,则它必须具有@Inject
注释
您需要这一行了解更多信息
public class Test {
@Inject
private Service1 service1;
@Inject
private Service2 service2;
public Test() {
}
}
public class Test {
private Service1 service1;
private Service2 service2;
@Inject
public Test(Service1 service1, Service2 service2) {
this.service1 = service1;
this.service2 = service2;
}
}