gpt4 book ai didi

android - 如何在 Roboguice 中通过构造函数注入(inject)参数? [安卓]

转载 作者:太空狗 更新时间:2023-10-29 14:24:24 24 4
gpt4 key购买 nike

这个问题可能与这个问题完全相同 Pass parameter to constructor with Guice

不同之处在于我使用 roboguice for android,而不仅仅是 Guice,所以那里的答案对我不起作用。

问题是——如何将初始化参数传递给创建的对象? IE。我已经注入(inject)接口(interface),应该使用一些 roboguice 不知道的参数进行初始化。

我在我提供的链接中看到的,我应该创建工厂接口(interface)并像这样注册

  void configure(Binder binder) {
binder.install(new FactoryModuleBuilder()
.implement(FooInterface.class, Foo.class)
.build(FooFactory.class));
}


但是我找不到FactoryModuleBuilder 类。我使用 Intellij IDEA,它可以显示我在当前位置可以访问的每个类,我可以 100% 确定没有以'Factory' 单词开头的类。

如何使用 roboguice 创建我的工厂?

已更新

忘记下载guice-assistedinject .但是我仍然不知道我应该在哪里注册这个工厂。

更新 2

为什么我需要它?因为应该存在某些抽象具有 Roboguice 无法解决的依赖性的情况。这种依赖关系可以是任何类型,甚至是简单的字符串或数字。

在我的例子中,我在 UI 上有 NumberPicker 控件,我想将所有 UI 特定任务移动到 MyNumberPickerWrapper 类中。当我创建这个包装器时,我通过构造函数注入(inject)它的依赖项(这个控件)。

如果我采用这种方法是正确的,这不是重点,但可能还有很多其他更适用的示例,其中需要构造函数注入(inject)并且 Roboguice 无法创建此注入(inject)类

最佳答案

我按照 Pass parameter to constructor with Guice 中给出的答案的步骤进行操作并稍作修改以在 roboguice 下运行它。对我来说完全没问题。

  1. 添加guice-assistinject库到gradle脚本

    dependencies { compile 'com.google.inject.extensions:guice-assistedinject:4.+' }
  2. 使用接受对象构造函数所需参数并返回对象接口(interface)的 create 方法创建工厂接口(interface)

    public interface ICustomObjectFactory {
    ICustomObject create(String queueName);
    }
  3. 为对象的构造函数添加@Inject注解,为来自工厂的每个参数添加@Assisted注解。

    public class CustomObject implements ICustomObject {
    protected String name;

    @Inject
    public CustomObject(@Assisted String name){
    this.name = name;
    }
    }
  4. 将绑定(bind)添加到您正在使用的模块中

    public class SomeModule extends AbstractModule {

    @Override
    protected void configure() {
    install(new FactoryModuleBuilder()
    .implement(ICustomObject.class, CustomObject.class)
    .build(ICustomObjectFactory.class));
    }
    }
  5. 注入(inject)工厂并创建对象的实例

    public class SomeClass {

    @Inject ICustomObjectFactory factory;

    public SomeClass () {
    ICustomObject first = this.factory.create("first");
    ICustomObject second = this.factory.create("second");
    }
    }

关于android - 如何在 Roboguice 中通过构造函数注入(inject)参数? [安卓],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13802275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com