Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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 带参数的Dagger构造函数注入_Java_Android_Dagger 2 - Fatal编程技术网

Java 带参数的Dagger构造函数注入

Java 带参数的Dagger构造函数注入,java,android,dagger-2,Java,Android,Dagger 2,我有一个关于匕首注射的问题 如果我要为一个类注入构造函数,那么构造函数也需要在运行时接受一个参数。如何从提供的模块中注入下面示例中的“条” 例如: class Foo { public static final class Factory { @Inject Factory() { } public Foo create(final DynamicRuntimeObj random) {

我有一个关于匕首注射的问题

如果我要为一个类注入构造函数,那么构造函数也需要在运行时接受一个参数。如何从提供的模块中注入下面示例中的“条”

例如:

class Foo {

      public static final class Factory {
           @Inject Factory() {
           }

            public Foo create(final DynamicRuntimeObj random) {
                 return new Foo(random);
           }
       }

       Bar mBar;
       DynamicRuntimeObj mRandom;

       @Inject
       Foo(Bar bar, DynamicRuntimeObj random) {
           mBar = bar;
           mRandom = random;
       }
 }
通常,我可以创建这样的对象

Foo foo = new Foo.Factory().create(new DynamicRuntimeObj());
提供程序在一个模块中自动注入bar,但需要在运行时创建DynamicRuntimeObj


谢谢

您必须使用
@提供的
来实现此目的

@Provides DynamicRuntimeObj provideMyDependency() {
  return ... // get that obj from somewhere
}

我不想为那个对象使用“提供”。
@Provides
在这里帮不了你;您需要一个工厂或其他替代品,以便消费者可以提供其参数。@JeffBowman我能想到的是让工厂“注入”条,并将注入的参数传递给Foo构造函数。@Dillon这是您从工厂实现或自动工厂获得的。
@提供的
无法接受消费者的参数。谢谢!我想我真正的问题是,是否有一种“更干净”的方式来做这件事。答案是使用自动工厂。这个概念被称为“辅助注射”,并且有一些。简而言之,你们需要一个像你们一样的工厂,但Dagger的姊妹项目AutoFactory可以为你们生产一个。在找到克里斯蒂安的答案之前,我还写了一篇文章。