package Ġkr . he uk hy eon . service _ locator . provider čĊč Ċ import Ġkotlinx . coroutines . Dispatch ers č Ċ import Ġkotlinx . coroutines . run Blocking č Ċ import Ġkr . he uk hy eon . service _ locator . Component Owner č Ċ import Ġkr . he uk hy eon . service _ locator . Fake Component Owner č Ċ import Ġkr . he uk hy eon . service _ locator . I Component Module č Ċ import Ġkr . he uk hy eon . service _ locator . Root Injector č Ċ import Ġjava . util .* č Ċ import Ġkotlin . reflect . K Class č Ċ import Ġkotlin . reflect . K Property čĊč Ċ /** čĊ Ġ* ĠRecyclerView . ViewHolder Ġëĵ± Ġìĸ´ëĸ ¤ ĠíĬ¹ ìłķ Ġíķ¨ìĪĺ ê°Ģ ĠìŀĲ ì£¼ Ġë¶Ī ë¦ ´ ê±° ëĿ¼ ĠìĺĪ ì¸ ¡ ëĲĺ ê³ł , Ġíķ¨ìĪĺ Ġíĺ¸ì¶ľ ë ķĮ ë§ Īëĭ¤ Ġê³ł ìľł íķľ Ġì»´ íı¬ ëĦ Į íĬ¸ ê°Ģ Ġë°ĺíĻĺ ëĲĺìĸ´ ìķ¼ Ġíķł ë ķĮ ĠìĤ¬ìļ© íķľëĭ¤ . čĊ Ġ* Ġ[ Provider ], Ġ[ React ing Provider ] ĠìĻ Ģ Ġëĭ ¬ ë¦¬ ĠíĮĮ ëĿ¼ ë¯¸ íĦ° ë¡ľ ĠëĦ ĺ ìĸ´ ìĺ ¨ Ġíģ´ëŀĺìĬ¤ ë¥¼ Ġì§ ģ ìłĳ Ġë°ĺíĻĺ íķĺì§Ģ ìķ Ĭ ê³ł Ġíķ´ëĭ¹ ĠíĥĢ ìŀħ ìĿĦ Ġê°Ģ ì§Ħ Ġ[ Factory ] Ġë ¥ ¼ Ġë°ĺíĻĺ íķĺ ë©° , čĊ Ġ* Ġìĭ¤ ìłľ Ġê°Ŀì²´ ĠìĥĿìĦ± ìĿĢ ĠìĿ´ Ġíģ´ëŀĺìĬ¤ ë¥¼ ĠíĨµíķ´ Ġìłĳ ê·¼ ê°Ģ ëĬ¥ íķľ Ġ[ Factory . create ] Ġíķ¨ìĪĺ ë¥¼ Ġíĺ¸ì¶ľ ìĭľ í Ĥ¨ ëĭ¤ . čĊ Ġ* čĊ Ġ* Ġ[ getValue ] Ġê°Ģ Ġíĺ¸ì¶ľ ëĲ ł ë ķĮ ë§ Īëĭ¤ ĠìŀĲ ì²´ ìłģìľ¼ë¡ľ Ġì»´ íı¬ ëĦ Į íĬ¸ ĠìĥĿìĦ± ìĿĦ Ġíķ´ ìĦľ Ġë°ĺíĻĺ ìĭľ í Ĥ¬ ìĪĺ ëıĦ ĠìŀĪ ì§Ģë§Į , ĠìĿ´ë ł ĩ ê²Į Ġíķł ê²½ ìļ° ĠìĤ¬ìļ©ìŀĲ Ġìŀħ ìŀ¥ ìĹĲìĦľ Ġíķ´ëĭ¹ Ġê°Ŀì²´ ê°Ģ čĊ Ġ* Ġìłĳ ê·¼ íķł ë ķĮ ë§ Īëĭ¤ Ġëĭ ¬ ëĿ¼ ì§ Ī ìĪĺ ìŀ Ī ìĿĮ ìĿĦ Ġê°Ħ ê³¼ íķĺê¸° Ġì ī ¬ ìļ° ë¯ Ģë¡ľ Ġê°Ħ ìłĳ ìłģìĿ¸ Ġë°©ë²ķ ìĿĦ ĠìĤ¬ìļ© íķľëĭ¤ . čĊ Ġ*/ č Ċ class ĠFactory Provider < T Ġ: ĠAny >( private Ġval Ġclazz : K Class < T >) Ġ: ĠI Provider < Factory Provider . Factory < T >> Ġ{ čĊčĊĠĠĠ Ġclass ĠFactory < T Ġ: ĠAny >( private Ġval Ġowner : ĠComponent Owner , Ġprivate Ġval Ġclazz : ĠK Class < T >) Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġfun Ġcreate (): ĠT Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking ( Dispatch ers . Default ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner Ġ= ĠFake Component Owner ( real Component Owner Ġ= Ġowner ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠRoot Injector . get ( owner , Ġclazz ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner . dispose () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġvar Ġfactory Ġ: ĠFactory < T >? Ġ= Ġnull čĊčĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinject ( owner : ĠComponent Owner ) Ġ{ čĊĠĠĠĠĠĠĠ Ġfactory Ġ= ĠFactory ( owner , Ġclazz ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġfinalize () Ġ{ čĊĠĠĠĠĠĠĠ Ġfactory Ġ= Ġnull čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġoperator Ġfun ĠgetValue ( this Ref : ĠComponent Owner , Ġproperty : ĠK Property < *> ): ĠFactory < T > Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġrequire NotNull ( factory ) čĊĠĠĠ Ġ} č Ċ }