- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我来自 C#/.NET 背景,已经学会了使用一些 Android。现在我想开始构建一个有趣的小应用程序,并且我尝试学习 IoC 框架。经过一番谷歌搜索后我找到了 roboguice。但我不知道如何集成它。上。
NET 我曾使用过 Ninject 和 Unity,并且希望创建与我从这些框架获得的类似形式的构造函数注入(inject)。
这是我到目前为止所拥有的以及我认为我已经弄清楚的:
此类代表应用程序 Bootstrap ,我将在此处注册我的依赖项配置类:
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 IOCApplication 应该首先被实例化的东西。
这是我的 MainActivily 类,我为它添加了一个构造函数:
public ITest test;
public MainActivity(ITest test){
this.test = test;
}
当我尝试在 Android 设备上运行此程序时,该应用程序似乎正在进入无限循环,并且我认为 ITest 并未实例化。
我做错了什么?
最佳答案
对于 Android 需要了解的一件事是,您不会实例化自己的 Activity,而是系统会实例化。
因此,您不能对 Activity 使用构造函数注入(inject)。但是,您可以使用属性注入(inject),在我看来这更干净。
扩展RoboActivity
class 是使用 Activity
进行注入(inject)的最简单方法。RoboGuice 为其他 Android 组件提供类似的类( RoboFragment
、 RoboService
等)
public class MyActivity extends RoboActivity {
@Inject
ITest test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// You can now use your test instance
}
}
所有带有 @Inject
的属性将在 super.onCreate(savedInstanceState);
之后实例化被调用。
使用POJO(普通旧式 Java 对象),您有更多选择:
属性注入(inject)
public class Test {
@Inject
private Service1 service1;
@Inject
private Service2 service2;
public Test() {
}
}
构造函数注入(inject)
public class Test {
private Service1 service1;
private Service2 service2;
@Inject
public Test(Service1 service1, Service2 service2) {
this.service1 = service1;
this.service2 = service2;
}
}
请注意,您的构造函数必须具有 @Inject
如果有参数则注释。
您需要此行 <application ... android:name="com.example.project2.IOCApplication">
告诉系统您正在使用扩展 Application
类(class)。如果没有它,Android 将使用基类。
我鼓励您阅读official documentation了解更多信息。
关于java - 使用 roboguice 进行构造函数注入(inject)进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18448453/
我创建了一个依赖于 ContentResolver 的类: public class MyClass { // these Injects won't work @Inject
这是我的 build.gradle 文件: buildscript { repositories { jcenter() } dependencies {
我正在尝试使用 android-quickstart 原型(prototype)创建一个 Android 基础项目,并添加 RoboGuice、ActionBarSherlock 依赖项以及 Robo
当我启动我的 RoboGuice android 应用程序时,以下消息出现在日志中: roboguice.RoboGuice﹕ Using full reflection. Try using Rob
这并不总是可见,但在特定的 API 14 和 19 上可见。 下面是堆栈跟踪 java.lang.NoClassDefFoundError: roboguice.inject.ContextScope
刚接触 roboguice,我喜欢它! 我有很多方法依赖于 DB 和 LocationManger 等,因此当我测试它们时,它使用真实的对象,我想模拟这些对象,这样当我测试时我就不必依赖在任何事情上。
我一直在查看 RoboGuice 2 的 astroboy 示例代码和文档,我真的很难过。我希望你们都可以帮助我尝试一些事情。这里的目标是测试模块以确保它正在加载并且 IoC 正在工作/连接。 我有一
这很奇怪。我在最近的所有具有相同库的项目中都使用了 Roboguice 2.0,一切似乎都很好。我开始了全新的项目,但在我的应用程序启动时,(...) 出现了一些令人毛骨悚然的错误。我到处搜索,从 S
我使用 Roboguice 1.1.2 和 guice-no-aop 2.0。我尝试使用辅助注入(inject),这需要 @Assisted 注释。我的问题是 guice-2.0-no_aop.jar
最近我下载了 Roboguice 并尝试了一下。总的来说我喜欢它,我认为它可以简化 Android 开发过程中的某些方面,但我遇到了一个尚未找到解决方案的情况:我想注入(inject)一个类,但该类有
我刚刚开始使用适用于 Android 的 Roboguice。尝试实现 this简单的上下文注入(inject)但出现此异常。我用谷歌搜索并遇到了很多帖子,但没有解决我的问题。这是下面的异常(exce
如何在自定义模块中获取应用程序上下文?这是我的模块的代码: public class MyModule extends AbstractModule { @Override @Supp
我正在使用 RoboGuice Providers 来注入(inject)自定义依赖项。我有两个提供商,第一个提供 Facebook AccessToken,第二个提供一个需要访问 token 的 F
我使用 Gradle 添加依赖项 org.roboguice:roboguice:3.0b-experimental到我的项目。 我找到了一个 post on the issue tracker ,说
我刚开始使用 Roboguice (+Guice),我不确定如何使用它的最佳实践。 在我的 Activity 中,我有大约 5 个函数(大约 30 个函数)使用一个名为“ProviderQueries
我正在尝试将 RoboGuice 作为依赖项安装到我的 Android Studio 项目中。一旦我尝试运行该项目(甚至在我添加任何新代码之前),我就会崩溃并显示以下输出: 信息:Gradle 任务
我在应用程序中打开了 proguard 我在应用程序 onCreate 中有一个警告 RoboGuice.injectMembers(_appContext, this); 异常: nalizable
我正在尝试在我的 Android 应用程序中使用 @InjectViews 但这似乎不起作用。这是它的代码。我已将库和 jar 包含到我的 android 应用程序中,并直接从 RoboActivit
我正在探索 RoboGuice 的世界,并且更改了一个 map Activity ,现在可以使用它了。它是一个 RoboMapActivity,我已经将应用程序的扩展名更改为从 RoboActivit
我第一次在项目中使用 RoboGuice,我试图注入(inject)一个静态变量,但该变量仍为空。这是我正在测试的东西的快速模型: public class MyActivity extends Ro
我是一名优秀的程序员,十分优秀!