Cog*_*man 6 java dependency-injection dagger-2
是否可以选择在匕首2中插入值?我尤其想做这样的事情。
@Inject A(Optional<B> b) {
this.b = b;
}
Run Code Online (Sandbox Code Playgroud)
如果B在模块中未定义,我想用匕首给出一个Optional.empty(),如果已定义则给定Optional.of(value)。
这是可行的,还是我需要一个定义这些可选值的模块?
可选注入需要一个模块为您的组件添加可选绑定,因为Dagger需要依赖关系图上的每个依赖,甚至是明确缺少的依赖。当您希望通过实现来实现此可选选项时,您将向组件(通常是子组件)添加要实现的impl绑定模块。
以下是模块的外观:
@Module
public interface OptionalModule {
@BindsOptionalOf
Foo bindOptionalFoo();
}
Run Code Online (Sandbox Code Playgroud)
和
@Module
public interface ImplModule {
@Binds
Foo bindFooImpl(FooImpl foo);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以构造函数或成员注入Optional
public class Bar {
@Inject
public Bar(Optional<Foo> optionalFoo) {}
}
Run Code Online (Sandbox Code Playgroud)
要么
public class Bar {
@Inject
public Optional<Foo> optionalFoo;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2813 次 |
| 最近记录: |