생성자 DSL
Koin은 이제 클래스 생성자를 직접 대상으로 지정하고 람다 표현식 내에서 정의를 직접 입력할 필요가 없는 새로운 종류의 DSL 키워드를 제공합니다.
다음 의존성을 가진 ClassA
클래스의 경우:
class ClassA(val b : ClassB, val c : ClassC)
class ClassB()
class ClassC()
이제 클래스 생성자
를 직접 대상으로 하여 해당 컴포넌트를 선언할 수 있습니다.
module {
singleOf(::ClassA)
singleOf(::ClassB)
singleOf(::ClassC)
}
이제 get()
함수로 생성자에 의존성을 지정할 필요가 없습니다! 🎉
INFO
클래스 생성자를 대상으로 지정하려면 클래스 이름 앞에 ::
를 사용해야 합니다.
NOTE
생성자는 모든 get()
으로 자동으로 채워집니다. Koin이 현재 그래프에서 값을 찾으려고 시도하므로 기본값을 사용하지 마세요.
NOTE
"이름이 지정된" 정의를 검색해야 하는 경우, 한정자(qualifier)를 지정하기 위해 람다와 get()
을 사용하는 표준 DSL을 사용해야 합니다.
사용 가능한 키워드
생성자로부터 정의를 빌드하는 데 사용할 수 있는 키워드는 다음과 같습니다.
factoryOf
-factory { }
와 동일 - 팩토리 정의singleOf
-single { }
와 동일 - 싱글턴 정의scopedOf
-scoped { }
와 동일 - 스코프 정의
INFO
Koin이 모든 매개변수를 해당 값으로 채우려고 시도하므로, 생성자에 기본값을 사용하지 않도록 주의하세요.
DSL 옵션
모든 생성자 DSL 정의는 람다 내에서 일부 옵션을 열 수도 있습니다.
module {
singleOf(::ClassA) {
// 정의 옵션
named("my_qualifier")
bind<InterfaceA>()
createdAtStart()
}
}
일반적인 옵션 및 DSL 키워드는 이 람다에서 사용할 수 있습니다.
named("a_qualifier")
- 정의에 String 한정자를 부여합니다.named<MyType>()
- 정의에 Type 한정자를 부여합니다.bind<MyInterface>()
- 주어진 빈 정의에 바인딩할 타입을 추가합니다.binds(listOf(...))
- 주어진 빈 정의에 바인딩할 타입 목록을 추가합니다.createdAtStart()
- Koin 시작 시 싱글턴 인스턴스를 생성합니다.
또한 람다 없이 bind
또는 binds
연산자를 사용할 수도 있습니다.
module {
singleOf(::ClassA) bind InterfaceA::class
}
주입된 매개변수
이러한 종류의 선언으로도 주입된 매개변수를 사용할 수 있습니다. Koin은 생성자를 주입하기 위해 주입된 매개변수와 현재 의존성을 찾아볼 것입니다.
다음과 같습니다.
class MyFactory(val id : String)
생성자 DSL로 선언된 경우:
module {
factoryOf(::MyFactory)
}
다음과 같이 주입될 수 있습니다.
val id = "a_factory_id"
val factory = koin.get<MyFactory> { parametersOf(id)}
리플렉션 기반 DSL (3.2부터 사용 중단)
CAUTION
Koin 리플렉션 DSL은 현재 사용 중단되었습니다. 위에 있는 Koin 생성자 DSL을 사용하십시오.