2017-10-20 9 views
0

매개 변수 - 열거 형 값을 사용하는 사용자 지정 한정자가 있습니다. 열거 형 값은 원하는 인스턴스의 생성과 관련된 정보를 포함합니다.공급자 메서드에 한정자 전달

예선 (자바) :

@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; 
    } 
} 
} 

모듈 (코 틀린) : 나는 그것을 열거 형에 새로운 가치를 추가까지 해요 경우

은 다음과 같이 모듈에 같은 상용구 코드로 연결

@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) 
} 

. 
. 
. 

} 

내가 어떻게 새로운 인스턴스를 열거 형에 추가 할 수 있었는지 어떻게 변경 될 수 있습니까? 그러면 공급자 메서드 나 그와 비슷한 것으로 전달 되었습니까?

답변

1

단검만으로는 안됩니다. Dagger에 피드하는 모듈을 codegen하지 않으면 프로그래밍 방식으로 주석을 읽고 값을 기반으로 다양한 조치를 취할 수 없습니다.

는 데메테르의 법칙을 굴절하지만

실용적으로는, 나는 이런 식으로 할 거라고 :

public class DateTimeFormatterFactory { 
    @Inject DateTimeFormatterFactory() {} 

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