package Ġcom . az h ark ova . di . memory . reference . cached Ċ Ċ import Ġcom . az h ark ova . di . container . DI Container Ċ import Ġcom . az h ark ova . di . scope . Scope Type Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Property Ċ Ċ class ĠCached Value < T : Any >( private Ġval Ġclazz : ĠK Class < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontainer Ġ: ĠDI Container Ġ Ġ= ĠDI Container . Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġfabric : Ġ() Ġ-> ĠT ?): ĊĠĠĠ ĠRead Write Property < Any ?, ĠT ?> Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : Any ? Ġ, Ġproperty : ĠK Property < *> ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontainer . resolve ( clazz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property <* >, Ġvalue : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontainer . register ( clazz , ĠScope Type . Cached , fabric ) ĊĠĠĠ Ġ} Ċ } Ċ inline Ġfun Ġ< re ified ĠT : Any > Ġcached ( container : ĠDI Container Ġ= ĠDI Container . Factory , Ġno inline Ġfabric : Ġ() Ġ-> ĠT ?) Ġ= ĠCached Value ( T :: class , container , fabric ) Ċ