Java 可选注射匕首2

Java 可选注射匕首2,java,dependency-injection,dagger-2,Java,Dependency Injection,Dagger 2,是否可以选择在dagger 2中插入值?我特别想做这样的事情 @Inject A(Optional<B> b) { this.b = b; } @注入A(可选b){ 这个.b=b; } 如果B在模块中未定义,我希望dagger给出一个可选的.empty(),如果定义了,则给出可选的.of(value) 这是可行的还是我需要一个定义这些可选值的模块?您正在寻找。可选注入需要一个模块向组件添加可选绑定,因为Dagger需要依赖关系图上的每个依赖项,甚至是显式缺少的依赖项。当您希望

是否可以选择在dagger 2中插入值?我特别想做这样的事情

@Inject A(Optional<B> b) {
  this.b = b;
}
@注入A(可选b){
这个.b=b;
}
如果B在模块中未定义,我希望dagger给出一个
可选的.empty()
,如果定义了,则给出
可选的.of(value)


这是可行的还是我需要一个定义这些可选值的模块?

您正在寻找。

可选注入需要一个模块向组件添加可选绑定,因为Dagger需要依赖关系图上的每个依赖项,甚至是显式缺少的依赖项。当您希望通过实现来实现此可选功能时,您将向想要实现它的组件(通常是子组件)添加一个impl绑定模块

以下是模块的外观:

@Module
public interface OptionalModule {
  @BindsOptionalOf
  Foo bindOptionalFoo();
}

然后您可以选择构造函数或成员注入

public class Bar {
  @Inject
  public Bar(Optional<Foo> optionalFoo) {}
}
公共类栏{
@注入
公共酒吧(可选foo){}
}

公共类栏{
@注入
公共可选foo;
}
public class Bar {
  @Inject
  public Bar(Optional<Foo> optionalFoo) {}
}
public class Bar {
  @Inject
  public Optional<Foo> optionalFoo;
}