대충 잘 쓰고 있는 dagger2 의 난이도가 너무 높은지 안드로이드 개발 시장이 koin 으로 넘어가고 있는 듯 싶은데
그래서 마이그 할까 싶어서 dagger2 에서 쓰던 코드를 koin 으로 바꾸려는 시작 부터 난 to the 감...
abstract class BaseDaggerRuleActivity<T: ViewDataBinding, M: ViewModel>
: BaseActivity<T>() {
@Inject lateinit var mDisposable: CompositeDisposable
@Inject lateinit var mViewModelFactory: DaggerViewModelFactory
대충 koin 문법으로는 아래와 같이 하면 될까 했는데 안된다.. =_ =
abstract class BaseKoinActivity<T: ViewDataBinding, out M: ViewModel>
: BaseActivity<T>() {
protected val mDisposable by inject<CompositeDisposable>()
protected val mViewModel by viewModel<M>()
viewModel<T>() 이 inline 인 데다가 T 의 경우 reified 이 므로 generics 가 안먹는 상황.. =_ =
좀 더 뒤적거려야 할 시점.. =_ =;
쉬운게 없군
덧.. https://github.com/InsertKoinIO/koin/issues/56 에 글을 보고 인자로 클래스 를 받는게 있는데 그건 좀 아닌것 같고 =_ =
그나마 이게 제일 현실적인 대안 같은 =_ =
open class BaseFragment<M : ViewModel> : Fragment() {
val viewModel: M by lazy { getViewModel(viewModelClass()) }
@Suppress("UNCHECKED_CAST")
private fun viewModelClass(): KClass<M> {
// dirty hack to get generic type https://stackoverflow.com/a/1901275/719212
return ((javaClass.genericSuperclass as ParameterizedType)
.actualTypeArguments[0] as Class<M>).kotlin
}
}
마침 내겐 Refect fun 을 또 만들어놨고 ㅎ
inline fun classType(obj: Any, index: Int) =
(obj.javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[index]
그래서 마이그 할까 싶어서 dagger2 에서 쓰던 코드를 koin 으로 바꾸려는 시작 부터 난 to the 감...
abstract class BaseDaggerRuleActivity<T: ViewDataBinding, M: ViewModel>
: BaseActivity<T>() {
@Inject lateinit var mDisposable: CompositeDisposable
@Inject lateinit var mViewModelFactory: DaggerViewModelFactory
대충 koin 문법으로는 아래와 같이 하면 될까 했는데 안된다.. =_ =
abstract class BaseKoinActivity<T: ViewDataBinding, out M: ViewModel>
: BaseActivity<T>() {
protected val mDisposable by inject<CompositeDisposable>()
protected val mViewModel by viewModel<M>()
viewModel<T>() 이 inline 인 데다가 T 의 경우 reified 이 므로 generics 가 안먹는 상황.. =_ =
좀 더 뒤적거려야 할 시점.. =_ =;
쉬운게 없군
덧.. https://github.com/InsertKoinIO/koin/issues/56 에 글을 보고 인자로 클래스 를 받는게 있는데 그건 좀 아닌것 같고 =_ =
그나마 이게 제일 현실적인 대안 같은 =_ =
open class BaseFragment<M : ViewModel> : Fragment() {
val viewModel: M by lazy { getViewModel(viewModelClass()) }
@Suppress("UNCHECKED_CAST")
private fun viewModelClass(): KClass<M> {
// dirty hack to get generic type https://stackoverflow.com/a/1901275/719212
return ((javaClass.genericSuperclass as ParameterizedType)
.actualTypeArguments[0] as Class<M>).kotlin
}
}
마침 내겐 Refect fun 을 또 만들어놨고 ㅎ
inline fun classType(obj: Any, index: Int) =
(obj.javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[index]
'Android' 카테고리의 다른 글
dagger 에서 koin 으로 convert (0) | 2019.06.12 |
---|---|
android with bamboo (0) | 2019.05.31 |
ui test code 작성 (0) | 2019.05.17 |
android q 에서 sandbox 경로 (0) | 2019.05.15 |
android q 로 타겟팅 하기 (0) | 2019.05.15 |