Dependency injection 将限定符传递给提供程序方法

Dependency injection 将限定符传递给提供程序方法,dependency-injection,dagger-2,Dependency Injection,Dagger 2,我有一个自定义限定符,它接受参数-enum值。枚举值包含特定于所需实例构造的信息 如果我准备向enum添加新值,则会在模块中产生相同的样板代码,如下所示: 限定符Java: @Documented @Qualifier @Retention(RUNTIME) public @interface Format { Type value() default SYSTEM; enum Type { UI("dd-MM-yyyy HH:mm"), UI_DATE("EEEE,\u00A

我有一个自定义限定符,它接受参数-enum值。枚举值包含特定于所需实例构造的信息

如果我准备向enum添加新值,则会在模块中产生相同的样板代码,如下所示:

限定符Java:

@Documented
@Qualifier
@Retention(RUNTIME)
public @interface Format {
Type value() default SYSTEM;

enum Type {
    UI("dd-MM-yyyy HH:mm"),
    UI_DATE("EEEE,\u00A0dd MMMM yyyy"),
    .
    .
    .

    private String format;

    public String getFormat() {
        return format;
    }

    Type(String formatString) {
        format = formatString;
    }
}
}
ModuleKotlin:

@Module
class DateTimeModule {

@Provides
@Format(Format.Type.UI)
fun dateTimeFormatterUI(): DateTimeFormatter {
    return DateTimeFormat.forPattern(Format.Type.UI.format).withLocale(DefaultConfigVariables.LOCALE)
}

@Provides
@Format(Format.Type.UI_DATE)
fun dateFormatterUI(): DateTimeFormatter {
    return DateTimeFormat.forPattern(Format.Type.UI_DATE.format).withLocale(DefaultConfigVariables.LOCALE)
}

.
.
.

}

是否有可能以某种方式更改它,使我只能向enum添加一个新实例,并将其传递给provider方法或类似的方法?

不仅仅是通过Dagger。除非您编码生成一个模块并将其输入Dagger,否则它将无法以编程方式读取您的注释并根据这些值采取不同的操作

实际上,尽管它违反了德米特定律,但我会这样做:

public class DateTimeFormatterFactory {
  @Inject DateTimeFormatterFactory() {}

  public DateTimeFormatter forFormat(Format.Type type) {
    return DateTimeFormat
        .forPattern(type)
        .withLocale(DefaultConfigVariables.LOCALE);
  }
}