是否可以选择在匕首2中注入一个值?特别是,我想做这样的事情。
@Inject A(Optional<B> b) {
this.b = b;
}
如果模块中的B未定义,我希望匕首给出Optional.empty()
,如果已定义,则给Optional.of(value)
。
这是可行的还是我需要一个定义这些可选值的模块?
答案 0 :(得分:5)
可选注入需要一个模块来向组件添加可选绑定,因为Dagger需要依赖关系图上的每个依赖项,甚至是明确缺少的依赖项。当您想通过实现来实现此可选项时,您将向组件添加一个impl绑定模块,通常是一个子组件,它想要实现它。
以下是模块的外观:
@Module
public interface OptionalModule {
@BindsOptionalOf
Foo bindOptionalFoo();
}
和
@Module
public interface ImplModule {
@Binds
Foo bindFooImpl(FooImpl foo);
}
然后你可以构造函数或成员注入Optional
public class Bar {
@Inject
public Bar(Optional<Foo> optionalFoo) {}
}
或
public class Bar {
@Inject
public Optional<Foo> optionalFoo;
}
答案 1 :(得分:0)
您正在寻找@BindsOptionalOf。