如何使用Dagger2在其构造函数中使用args注入对象

时间:2016-09-22 09:44:44

标签: java dependency-injection dagger-2

更新

现在我修改了这样的代码,但它确实有效,但我不知道这是正确的方法。

班级 http://pastebin.com/srhu4eB7

这是注入 http://pastebin.com/wLbxBQqb

我正在学习如何在我的项目中使用dagger2,但我不知道如何注入这种依赖。 我有一个带有构造函数的测试calss,我将传递来自活动的3个args,我想要注入我的类。 这是我的测试类http://pastebin.com/XqRNFbvj 以下是我的测试类的模块http://pastebin.com/r4wmqfLB这是我的组件http://pastebin.com/r1QYdNJx
这里我想如何使用注射,但它不起作用:http://pastebin.com/cs0V5wfq

我可以以某种方式注入这样的对象,或者我如何将args传递给注入的对象?

1 个答案:

答案 0 :(得分:1)

如果您在此课程中没有任何其他依赖关系,那么可能它不是您的活动的依赖,您可以使用OPTIONAL MATCH p=(o:PORT{name:"busstop1"})-[r:CONNECTSWITH*..3]->(d:PORT{name:"busstop2"}) WHERE ALL(r1 in rels(p) WHERE 1 = size(filter(r2 IN rels(p) WHERE (r1.service = r2.service)))) = ALL(n IN nodes(p) WHERE 1 = size(filter(m IN nodes(p) WHERE id(m) = id(n)))) AND ALL(r1 in rels(p) WHERE 1 = size(filter(r2 IN rels(p) WHERE (r1.service = r2.service)))) RETURN p LIMIT 10 。但是要回答你的问题,你想要用这样的模块为你的活动(或这类活动)建立一个子组件:

new

你可以像以下一样使用它:

@Module
public class TestModule {
  private final String arg1;
  private final int arg2;
  private final boolean arg3;

  public TestModule(String arg1, int arg2, boolean arg3) {
    this.arg1 = arg1;
    this.arg2 = arg2;
    this.arg3 = arg3;
  }

  @Provides DaggerTestClass provideDaggerTestClass() {
    return new DaggerTestClass(arg1, arg2, arg3);
  }
}

如果您在此课程中有其他依赖项,那么您可能想要实际使用工厂(可能使用AutoFactory为您生成),然后"手动注入"创建的对象:

IndexApplication.getApplication().getAppComponent()
    .daggerTestSubcomponent(new DaggerTestModule("arg1", 2, true))
    .inject(this);