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可以为你们生产一个。在找到克里斯蒂安的答案之前,我还写了一篇文章。