Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带roboguice的构造函数注入进入有限循环_Java_Android_Roboguice - Fatal编程技术网

Java 带roboguice的构造函数注入进入有限循环

Java 带roboguice的构造函数注入进入有限循环,java,android,roboguice,Java,Android,Roboguice,大家好,我来自C#/.NET的背景,已经学会了使用一些Android。现在我是wana,开始创建一个有趣的小应用程序,我想学习一个IoC框架。经过一点谷歌搜索,我发现了roboguice。但我不知道如何集成它。继续 NET我与Ninject和Unity合作过,我希望创建一种类似于我从这些框架中获得的构造函数注入形式 以下是我到目前为止所了解的情况,以及我认为我已经了解到的情况: 此类表示应用程序引导程序,我将在此处注册依赖项配置类: public class IOCApplication ext

大家好,我来自C#/.NET的背景,已经学会了使用一些Android。现在我是wana,开始创建一个有趣的小应用程序,我想学习一个IoC框架。经过一点谷歌搜索,我发现了roboguice。但我不知道如何集成它。继续

NET我与Ninject和Unity合作过,我希望创建一种类似于我从这些框架中获得的构造函数注入形式

以下是我到目前为止所了解的情况,以及我认为我已经了解到的情况:

此类表示应用程序引导程序,我将在此处注册依赖项配置类:

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;
    }
}