рдореБрдЭреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛рдПрдБ рдирд╣реАрдВ
Kodein
, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░
Kodein
рдХреЛ
Kodein
рдерд╛, рдФрд░ рдкреНрд░рд▓реЗрдЦрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рд╕реБрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдиреНрдирдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░
Kodein
рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдорд┐рд▓реЗрдЧрд╛
Kodein
рдХрд┐ рдЖрдкрдиреЗ рд▓реЗрдЦ рдкрдврд╝рд╛ред рд▓реЗрдЦ
Kodein 5.3.0
рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
Kodein 6.0.0
рдХреЛ
Support Library 28
рдпрд╛
AndroidX
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдпрд╣ рд╕рднреА рд╕реЗ рджреВрд░ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рддреГрддреАрдп-рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрднреА рддрдХ рд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред

Kodein
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди (DI) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ
рдбреИрдЧрд░ 2 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдкрдврд╝реЗрдВ, рдЬрд╣рд╛рдВ рд▓реЗрдЦрдХ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдбреАрдЖрдИ рдХреЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдкрд╣рд▓реБрдУрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЛрдбрд┐рди рдХреЛрдЯрд▓рд┐рди (рдЬреЗрд╡реАрдПрдо, рдПрдВрдбреНрд░реЙрдЗрдб, рдЬреЗрдПрд╕, рдиреЗрдЯрд┐рд╡) рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
рд╕реНрдерд╛рдкрдирд╛
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ
type erasure
, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ - рдХрдВрдкрд╛рдЗрд▓рд░ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдмрд╛рдЗрдЯрдХреЛрдб рд╕реНрддрд░ рдкрд░,
List<String>
рдФрд░
List<Date>
рдмрд╕
List
ред рдлрд┐рд░ рднреА, рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЦрд░реНрдЪ рд╣реЛрдВрдЧреЗ рдФрд░ рдХреЗрд╡рд▓ рдЬреЗрд╡реАрдПрдо рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ,
Kodein
рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреЛ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ: рдПрдХ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рдХрд╛рд░реЛрдВ (
kodein-generic
) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ (
kodein-erased
) рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
kodein-erased
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп
List<String>
рдФрд░
List<Date
> рдХреЛ
List<*>
рд░реВрдк рдореЗрдВ рд╕реЗрд╡ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░
kodein-generic
рдХрд╛ рдЙрдкрдпреЛрдЧ
kodein-generic
рд╕рдмрдХреБрдЫ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реА рд╕реЗрд╡ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛рдиреА
List<String>
рдФрд░
List<Date>
рдХреНрд░рдорд╢рдГ
List<Date>
ред
рдХреИрд╕реЗ рдЪреБрдиреЗрдВ?
рдЬреЗрд╡реАрдПрдо рдХреЗ рддрд╣рдд
рдирд╣реАрдВ рд▓рд┐рдЦреЗрдВ -
kodein-erased
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИред
рдЬреЗрд╡реАрдПрдо рдХреЗ рддрд╣рдд рд▓рд┐рдЦреЗрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдореБрджреНрджрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдЖрдк
kodein-erased
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдпрд╣ рдЕрдиреБрднрд╡ рдЗрди рд╢рдмреНрджреЛрдВ рдХреЗ рдмреБрд░реЗ рдЕрд░реНрдереЛрдВ рдореЗрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреНрд░рджрд░реНрд╢рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ
kodein-generic
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЕрдВрддрддрдГ, рдпрджрд┐ рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдкрд░ DI рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдереЛрдХ рдПрдХ рдмрд╛рд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╛ рдмрд╛рд░-рдмрд╛рд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ, рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
рдкрд╣рд▓реЗ - build.gradle рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдмреАрдЪ jcenter () рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ - рдЬреЛрдбрд╝реЗрдВред
buildscript { repositories { jcenter() } }
рдЕрдЧрд▓рд╛, рдирд┐рд░реНрднрд░рддрд╛ рдмреНрд▓реЙрдХ рдореЗрдВ, рдКрдкрд░ рдмрддрд╛рдИ рдЧрдИ рдореВрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:
implementation "org.kodein.di:kodein-di-generic-jvm:$version"
implementation "org.kodein.di:kodein-di-erased-jvm:$version"
рдЪреВрдВрдХрд┐ рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реЛрдВрдЧреАред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдбрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдХреНрдпреЛрдВ рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛)? рдкрд╕рдВрдж рдЖрдкрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред
рдпрд╣рд╛рдВ рднреА рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк
SupportLibrary
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
implementation "org.kodein.di:kodein-di-framework-android-core:$version"
рджреВрд╕рд░рд╛ - рдЙрдкрдпреЛрдЧ
implementation "org.kodein.di:kodein-di-framework-android-support:$version"
рддреАрд╕рд░рд╛ - рдЖрдк AndroidX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
implementation "org.kodein.di:kodein-di-framework-android-x:$version"
рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдкреИрджрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
Dagger2
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ
Dagger2
, рдореБрдЭреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рд╕ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЛрдбреАрди рдХреЗ рд╕рд╛рде, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
class MyApp : Application() { val kodein = Kodein { } }
рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рд╣рдореЗрд╢рд╛ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ
bind<TYPE>() with
рдЯреИрдЧ
рдХреЛрдбреАрди рдирд┐рд░реНрднрд░рддрд╛ рдЯреИрдЧрд┐рдВрдЧ Dagger2 рд╕реЗ
Qualifier
рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╕рдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
Dagger2
рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдЕрд▓рдЧ
Qualifier
рдпрд╛
@Named("someTag")
, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
Qualifier
рднреА рд╣реИред рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛ рд╕рд░рд▓ рд╣реИ - рдЗрд╕ рддрд░рд╣ рдЖрдк рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рджреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░
ontext
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ
Activity
рдХрд╛
ontext
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
Kodein
рдЯреИрдЧ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдЖрдзрд╛рд░ рдПрдХ рд╣реЛрдЧрд╛ рдФрд░ рдпрджрд┐ рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдЯреИрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рджреВрд╕рд░реЛрдВ рдХреЛ рдЯреИрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЬрдм рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рддреЛ рдЯреИрдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
val kodein = Kodein { bind<Context>() with ... bind<Context>(tag = "main_activity") with ... bind<Context>(tag = "sale_activity") with ... }
tag
рдкреИрд░рд╛рдореАрдЯрд░
Any
рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдПрдВ
equals
рдФрд░
hashCode
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд╛рдорд┐рдд рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреИрдЧ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдк рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдПрдВ рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░
Kodein
рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ,
Kodein
рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд╕рд╛рде
Kodein
рдХрд░рддреЗ рд╣реИрдВ -
Kodein
рдмрдирд╛рдирд╛ред рд╕рд┐рдВрдЧрд▓рдЯрди
Kodein
рдХреЗ рдирд┐рд░реНрдорд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░
Kodein
ред
рдкреЗрд╢ рд╣реИ рд╕рд┐рдВрдЧрд▓рдЯрди
рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
val kodein = Kodein { bind<IMyDatabase>() with singleton { RoomDb() } }
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо
IMyDatabase
рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкреАрдЫреЗ
IMyDatabase
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЫрд┐рдкрд╛ рд╣реЛрдЧрд╛ред рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдкрд░
RoomDb
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдирдпрд╛
Kodein
рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ
Kodein
рддрдм рддрдХ рдЗрд╕реЗ
Kodein
рд╕реЗ
Kodein
рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдирд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЙрди рдЬреЛрдЦрд┐рдореЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред
val kodein = Kodein { bind<IMyDatabase>() with singleton(sync = false) { RoomDb() } }
рдпрджрд┐ рдЖрдкрдХреЛ рдкрд╣рд▓реА рдХреЙрд▓ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди
Kodein
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
val kodein = Kodein { bind<IMyDatabase>() with eagerSingleton { RoomDb() } }
рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдПрдХ рдирдИ рдорд┐рд╕рд╛рд▓ рдХрд╛рдпрдо рдХрд░рдирд╛
рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрд╛рддрд╛рд░ рдПрдХрд▓ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдПрдХрд▓ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП,
provider
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
val kodein = Kodein { bind<IMainPresenter>() with provider { QuantityPresenter() } }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдПрдХ
IMainPresenter
рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
IMainPresenter
рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд▓рдЧрд╛рддрд╛рд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкрд╛рд╕ рдХрд░реЗрдВ
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЖрдк рд╣рд░ рдмрд╛рд░ рдЗрд╕рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдзрд┐рдХрддрдо
5 рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП,
factory
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
val kodein = Kodein { bind<IColorPicker>() with factory { r: Int, g: Int, b: Int, a: Int -> RgbColorPicker(r, g, b, a) } }
рд╣рд░ рдмрд╛рд░ рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреИрд╢реНрдб рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ
рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рдкрдврд╝рддреЗ рд╣реБрдП, рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдирдП рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрдмрдХрд┐ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд▓реЗрдХрд┐рди рдЙрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
val kodein = Kodein { bind<IRandomIntGenerator>() with multiton { from: Int, to: Int -> IntRandom(from, to) } }
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рдорд╛рдкрджрдВрдбреЛрдВ
5
рдФрд░
10
рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
10
рддреЛ рд╣рдо
IntRandom(5, 10)
рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг
IntRandom(5, 10)
, рдЬрдм рд╣рдо рдЙрд╕реА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реЗ рдПрдХ
map
рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
factory
рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рддрд░реНрдХ, рдЕрдзрд┐рдХрддрдо
5 рд╣реИрдВ ред
рдПрдХрд▓ рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдпрд╣рд╛рдБ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
val kodein = Kodein { bind<IRandomIntGenerator>() with multiton(sync = false) { from: Int, to: Int -> IntRandom(from, to) } }
рдХреЛрдбреАрди рдореЗрдВ рдирд░рдо рдФрд░ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
multiton
рдпрд╛
multiton
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╕рдордп
multiton
рдЖрдк рд╕рдВрдЧреНрд░рд╣реАрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдКрдкрд░ рдорд╛рдирд╛ рд╣реИ - рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп
strong
рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди
soft
рдФрд░
weak
рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирдП рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ
рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдкрдХреЗ рд╕рд┐рдВрдЧрд▓реЗрдЯреЛрдиреНрд╕ рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрдирдГ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
val kodein = Kodein { bind<IMyMap>() with singleton(ref = softReference) { WorldMap() } bind<IClient>() with singleton(ref = weakReference) { id -> clientFromDB(id) } }
рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕рд┐рдВрдЧрд▓рдЯрди
рдпрд╣ рдПрдХ рд╣реА рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдЪрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░
ref
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
val kodein = Kodein { bind<Cache>() with singleton(ref = threadLocal) { LRUCache(16 * 1024) } }
рд▓рдЧрд╛рддрд╛рд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ
рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд▓реЗрдЦрди рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐
Kodein
рд╕рд╛рде рдЖрдкрдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ
Kodein
, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрджрд┐рдо рдпрд╛ рдбреЗрдЯрд╛ рд╡рд░реНрдЧред
val kodein = Kodein { constant(tag = "maxThread") with 8 constant(tag = "serverURL") with "https://my.server.url"
рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдПрдБ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛рдПрдВ рдирд╣реАрдВред
bind
рдХрд░рддреЗ рд╕рдордп рдЖрдк рдЯрд╛рдЗрдк рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
bind
рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп
from
рдЙрдкрдпреЛрдЧ
with
ред
val kodein = Kodein { bind() from singleton { Gson() }
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рдд, рдПрдХ
Gson
рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрднрд░рддрд╛
Gson
рдЬрд╛рдПрдЧреАред
рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЙрдк-рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдПрдБ
Kodein
рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдпрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
val kodein = Kodein { bind<Animal>().subTypes() with { animalType -> when (animalType.jvmType) { Dog::class.java -> eagerSingleton { Dog() } else -> provider { WildAnimal(animalType) } } }
Animal
рд╡рд░реНрдЧ рдпрд╛ рддреЛ рдПрдХ
.subtypes
рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ,
.subtypes
рдХрд╛ рдЙрдкрдпреЛрдЧ
.subtypes
рд╣рдо рдЯрд╛рдЗрдк
TypeToken<*>
animalType
рдПрдХ
animalType
рдЯрд╛рдЗрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдЖрдк рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ
TypeToken
рдпрд╛ рдЙрд╕рдХреЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рднреА рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рд╕реГрдЬрди рдХреЗ рд╕рд╛рде рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдПрдБ
рдЕрдХреНрд╕рд░, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╡рд░реНрдЧ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
class ProductGateway(private val api: IProductApi, private val dispatchers: IDispatchersContainer) : IProductGateway
рдкрд╣рд▓реЗ рд╕реЗ
Kodein
рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
Kodein
рдПрдХ рдЙрджрд╛рд╣рд░рдг () рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реГрдЬрди рдХрд╛ рдХреНрд░рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред
bind<IDispatchersContainer>() with singleton { DispatchersContainer() } bind<IProductGateway>() with singleton { ProductGateway(instance(), instance()) } bind<IProductApi>() with singleton { ProductApi() }
instance()
рдмрдЬрд╛рдп
instance()
provider()
рдпрд╛
factory()
рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдкрд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрди рддрд░реАрдХреЛрдВ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред
рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдПрдВ
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк
instance<TYPE>
рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ рд╡рд░реНрдЧ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирдИ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
bind<DataSource>() with singleton { MySQLDataSource() } bind<Connection>() with provider { instance<DataSource>().openConnection() }
рдореЙрдбреНрдпреВрд▓
Dagger2
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ
Dagger2
, рдореИрдВ
Dagger2
рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ
Dagger2
рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реВрдВред
Kodein
, рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдЖрдкрдХреЛ
Application
рд╡рд░реНрдЧ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ,
Kodein
рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред
val appModule = Kodein.Module("app") { bind<Gson>() with singleton { provideGson() } bind<HttpClient>() with singleton { provideHttpClient() } } val kodein: Kodein = Kodein { import(appModule) bind<ISchedulersContainer>() with singleton { SchedulersContainer() }
рд▓реЗрдХрд┐рди рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд░реНрдл рдХрдВрдЯреЗрдирд░ рд╣реИрдВ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ; рд╡реЗ рд╕реНрд╡рдпрдВ рдХрдХреНрд╖рд╛рдПрдВ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ
Kodein
рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдХрд▓,
Kodein
рдкреНрд░рддрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг
Kodein
ред
рд╕рд╛рде рд╣реА, рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдирд╛рдо рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕рдХреЗ рдирд╛рдо рдореЗрдВ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
import(apiModule.copy(name = "firstAPI")) import(secondApiModule.copy(prefix = "secondAPI-"))
рдореИрдВ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ рдЬрдм рдореЙрдбреНрдпреВрд▓ рдПрдХ-рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рддреЗ рд╣реИрдВред
Kodein
рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ
Kodein
рдПрдХ рдмрд╛рд░ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рджреЛ рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ
Kodein
рдореЗрдВ рд╕рдорд╛рди рдирд┐рд░реНрднрд░ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рддреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реИ - рдЖрдкрдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
importOnce(someModule)
рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓рд╛ рдореЙрдбреНрдпреВрд▓ рдкрд╣рд▓реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛:
val appModule = Kodein.Module("app") { bind<Gson>() with singleton { provideGson() } } val secondModule = Kodein.Module("second") { import(appModule) } val thirdModule = Kodein.Module("third") { import(appModule) } val kodein: Kodein = Kodein { import(secondModule) import(thirdModule) }
val appModule = Kodein.Module("app") { bind<Gson>() with singleton { provideGson() } } val secondModule = Kodein.Module("second") { importOnce(appModule) } val thirdModule = Kodein.Module("third") { import(appModule) } val kodein: Kodein = Kodein { import(secondModule) import(thirdModule) }
рд▓реЗрдХрд┐рди рдЕрдЧрд░
importOnce
рдХреЙрд▓ рджреВрд╕рд░реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рдпрд╛рд╕ рдкрд░ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред
val appModule = Kodein.Module("app") { bind<Gson>() with singleton { provideGson() } } val secondModule = Kodein.Module("second") { import(appModule) } val thirdModule = Kodein.Module("third") { importOnce(appModule) } val kodein: Kodein = Kodein { import(secondModule) import(thirdModule) }
рд╡рд┐рд░рд╛рд╕рдд
рдпрджрд┐ рдЖрдк рдПрдХ рд╣реА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рджреЛ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдВрдЧреА, рд▓реЗрдХрд┐рди
Subcomponents
рдореЗрдВ
Dagger2
Subcomponents
рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ
Subcomponents
рдореЗрдВ
Dagger2
? рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕
Kodein
рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╡рд╛рд░рд┐рд╕ рдореЗрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдорд┐рд▓реЗрдЧреАред
val kodein: Kodein = Kodein { bind<ISchedulersContainer>() with singleton { SchedulersContainer() }
рдкрд░рд┐рднрд╛рд╖рд╛
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЕрдиреНрдпрдерд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдкрд╛рдЧрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рд▓реЗрдХрд┐рди
bind
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдПред
val kodein = Kodein { bind<Api>() with singleton { ApiImpl() } bind<Api>(overrides = true) with singleton { OtherApiImpl() } }
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЙрдирдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ
Kodein
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдШреЛрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрдХреЗрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореМрдЬреВрджрд╛ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛:
val appModule = Kodein.Module("app") { bind<Gson>() with singleton { provideGson() } } val kodein: Kodein = Kodein { bind<Gson>() with singleton { provideGson() } import(appModule) }
val appModule = Kodein.Module("app") { bind<Gson>() with singleton { provideGson() } } val kodein: Kodein = Kodein { bind<Gson>() with singleton { provideGson() } import(appModule, allowOverride = true) }
рдФрд░ рдЗрд╕рдореЗрдВ, рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрднрд░рддрд╛
Kodein
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рддреА рд╣реИред
val appModule = Kodein.Module("app") { bind<Gson>(overrides = true) with singleton { provideGson() } } val kodein: Kodein = Kodein { bind<Gson>() with singleton { provideGson() } import(appModule, allowOverride = true) }
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░
Kodein
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП
allowSilentOverride
рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
val testModule = Kodein.Module(name = "test", allowSilentOverride = true) { bind<EmailClient>() with singleton { MockEmailClient() } }
рдкреНрд░рд▓реЗрдЦрди рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рдг рдФрд░ рд╕рд╛рде рд╣реА рд╡рд╛рд░рд┐рд╕реЛрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдирд╛
рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрдИ рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдпрд╛ рдЬрд╛рдПред
Kodein
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ -
injection
рдФрд░
retieval
ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ,
injection
рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд░реНрдЧ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
retrieval
, рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ, рдФрд░
retrieval
рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рд╡рд░реНрдЧ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИред
injection
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп
injection
рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рдХреЛ
Kodein
рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдФрд░ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЛрдб рдХреНрд▓реАрдирд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк
retrieval
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред
retrieval
рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ
retrieval
рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЖрд▓рд╕реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдХреЗрд╡рд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдЕрдкреАрд▓ рдХреЗ рд╕рдордпред
рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Kodein
рддрд░реАрдХреЗ
Kodein
рд╡рд░реНрдЧ рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ рддреАрди рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛, рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛рд░рдЦрд╛рдирд╛, рдпрд╛ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рджрд╛рддрд╛ -
instance()
,
factory()
рдФрд░
provider()
рдХреНрд░рдорд╢рдГ рд▓реМрдЯрд╛рддреА рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк рдПрдХ
factory
рдпрд╛
provider
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рди рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдк рд╕рднреА рд╡рд┐рд╡рд┐рдзрддрд╛рдУрдВ рдореЗрдВ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
val kodein: Kodein = Kodein { bind<BigDecimal>() with factory { value: String -> BigDecimal(value) } bind<Random>() with provider { Random() } } private val number: BigDecimal by instance(arg = "23.87") private val numberFactory: (value: String) -> BigDecimal by factory() private val random: Random by instance() private val randomProvider: () -> Random by provider()
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рдпрд╣
injection
рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рднреА рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░
kodein.newInstance
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛
kodein.newInstance
class ProductApi(private val client: HttpClient, private val gson: Gson) : IProductApi class Application : Application() { val kodein: Kodein = Kodein { bind<Gson>() with singleton { provideGson() } bind<HttpClient>() with singleton { provideHttpClient() } } private val productApi: IProductApi by kodein.newInstance { ProductApi(instance(), instance()) } }
рдЕрд╢рдХреНрдд рдЧреБрдгреЛрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИред рдпрджрд┐
Kodein
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХреА
Kodein
, рддреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдХреЛ
Kodein.NotFoundException
рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ
null
рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреАрди рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд╣реИрдВ:
instanceOrNull()
factoryOrNull()
,
factoryOrNull()
рдФрд░
providerOrNull()
ред
class ProductApi(private val client: HttpClient?, private val gson: Gson) : IProductApi class Application : Application() { val kodein: Kodein = Kodein { bind<Gson>() with singleton { provideGson() } } private val productApi: IProductApi by kodein.newInstance { ProductApi(instanceOrNull(), instance()) } }
рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрдм рд╣рдо
retrieval
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрд▓рд╕реА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рддрдм рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЙрдиреНрд╣реЗрдВ рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреИрджрд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдорд┐рд▓рддреА рд╣реИред
Activity
,
Fragment
рдФрд░ рдЕрдиреНрдп рдХрдХреНрд╖рд╛рдПрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
Activity
рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
Activity
рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдХреЛрдбреАрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░
retrieval
рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕реМрдВрдкрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
instance()
,
factory()
рдпрд╛
provider()
private val number: BigDecimal by kodein.instance(arg = "23.87") private val numberFactory: (value: String) -> BigDecimal by kodein.factory() private val random: Random? by kodein.instanceOrNull() private val randomProvider: (() -> Random)? by kodein.providerOrNull()
рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛
рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣
instance
рдлрд╝рдВрдХреНрд╢рди рдХреЗ
arg
рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХрдИ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ (рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдПрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ 5 рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ )? рдЖрдкрдХреЛ рдмрд╕ рдЙрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдПрдХ arg
рд╡рд░реНрдЧ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ M
рдЬрд┐рд╕рдореЗрдВ рдУрд╡рд░рд▓реЛрдбреЗрдб рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИрдВ рдФрд░ 2 рд╕реЗ 5 рддрд░реНрдХ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред val kodein = Kodein { bind<IColorPicker>() with factory { r: Int, g: Int, b: Int, a: Int -> RgbColorPicker(r, g, b, a) } } val picker: IColorPicker by kodein.instance(arg = M(255, 211, 175, 215))
рдмрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдЖрд░рдВрднреАрдХрд░рдг
рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЖрд░рдВрднреАрдХрд░рдг рдЖрд▓рд╕реА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдЯреНрд░рд┐рдЧрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐, рдХрдИ рдЧреБрдгреЛрдВ рдпрд╛ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдмрд╛рдБрдз рд╕рдХрддреЗ рд╣реИрдВ, Kodein
рдЗрд╕ рдЯреНрд░рд┐рдЧрд░ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред val myTrigger = KodeinTrigger() val gson: Gson by kodein.on(trigger = myTrigger).instance() myTrigger.trigger()
val myTrigger = KodeinTrigger() val kodeinWithTrigger = kodein.on(trigger = myTrigger) val gson: Gson by kodeinWithTrigger.instance() myTrigger.trigger()
рдЖрд▓рд╕реА рдХреЛрдбреАрди рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрдорд╛рдг
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рд▓рдЧрд╛рддрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рд╣реИ Kodein
, рд▓реЗрдХрд┐рди LazyKodein
рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП Kodein
редрдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреЛрдбреАрди рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред val kodein: Kodein = LazyKodein { Kodein { bind<BigDecimal>() with factory { value: String -> BigDecimal(value) } bind<Random>() with provider { Random() } } } private val number: BigDecimal by kodein.instance(arg = "13.4") number.toPlainString()
рдХреЛрдбреАрди.рд▓рд╛рдЬреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░реЗрдЧрд╛ред val kodein: Kodein = Kodein.lazy { bind<BigDecimal>() with factory { value: String -> BigDecimal(value) } bind<Random>() with provider { Random() } } private val number: BigDecimal by kodein.instance(arg = "13.4") number.toPlainString()
рдХреЛрдбреАрди рджреЗрд░реА рд╢реБрд░реБрдЖрдд
рд╡рд┐рд▓рдВрдмрд┐рдд рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, Kodein
рдПрдХ рд╡рд╕реНрддреБ рдореМрдЬреВрдж рд╣реИ LateInitKodein
ред рдЖрдк рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ baseKodein
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдФрд░ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрд╕ рдкрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╢реНрд░рд┐рддреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред val kodein = LateInitKodein() val gson: Gson by kodein.instance() kodein.baseKodein = gson.fromJson(someStr)
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдЖрдк рдХреЛрдбрд┐рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЗрд╕рдХреЗ рд╕рднреА рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ List
ред рд╕рдм рдХреБрдЫ рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЯреИрдЧ рдХреЗ рднреАрддрд░ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣рд╛рдБ рддрд░реАрдХреЗ рд╣реИрдВ allInstances
, allProviders
, allFactories
ред val kodein: Kodein = Kodein { bind<Number>() with singleton { Short.MAX_VALUE } bind<Double>() with singleton { 12.46 } bind<Double>("someTag") with singleton { 43.89 } bind<Int>() with singleton { 4562 } bind<Float>() with singleton { 136.88f } } val numbers: List<Number> by kodein.allInstances()
рдпрджрд┐ рдЖрдк рд▓реЙрдЧ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд╣рд╛рдВ рджреЗрдЦреЗрдВрдЧреЗ [32767, 136.88, 4562, 12.46]ред рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рд╣реИредрдХреЛрдбреАрдирд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрднрд░рддрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдВ
рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЖрдкрдХреЛ рдЯрд╛рдЗрдк рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИ Kodein
, рдФрд░ рдмрджрд▓реЗ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ Kodein
ред class MyApplication : Application(), KodeinAware { override val kodein: Kodein = Kodein { bind<Number>() with singleton { Short.MAX_VALUE } bind<Double>() with singleton { 12.46 } bind<Double>("someTag") with singleton { 43.89 } bind<Int>() with singleton { 4562 } bind<Float>() with singleton { 136.88f } } val numbers: List<Number> by allInstances() }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдм рдЖрдк рдкрд╣рд▓реЗ рдХреЗ by allInstances()
рдмрдЬрд╛рдп рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ by kodein.allInstances()
, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ, KodeinAware
рдЖрдк рдПрдХ рдЯреНрд░рд┐рдЧрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдЯреНрд░рд┐рдЧрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рд╕рднреА рдШреЛрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред class MyApplication : Application(), KodeinAware { override val kodein: Kodein = Kodein { bind<Number>() with singleton { Short.MAX_VALUE } bind<Double>() with singleton { 12.46 } bind<Double>("someTag") with singleton { 43.89 } bind<Int>() with singleton { 4562 } bind<Float>() with singleton { 136.88f } } override val kodeinTrigger = KodeinTrigger() val numbers: List<Number> by allInstances() override fun onCreate() { super.onCreate() kodeinTrigger.trigger() } }
рдЪреВрдБрдХрд┐ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рдФрд░ рдЙрджрд╛рд╣рд░рдг Kodein
рдЖрд▓рд╕реА рд╣реИ, рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЛ Kodein
рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд░рдореНрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ lazy
ред рдЗрд╕ рддрд░рд╣ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрдирдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдВ Activity
ред class CategoriesActivity : Activity(), KodeinAware { override val kodein: Kodein by lazy { (application as MyApplication).kodein } private val myFloat: Float by instance()
рдЙрд╕реА рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ lateinit
ред class CategoriesActivity : Activity(), KodeinAware { override lateinit var kodein: Kodein private val myFloat: Float by instance() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) kodein = (application as MyApplication).kodein }
рдЧреБрдгреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рддрдХ рдкрд╣реБрдВрдЪ
рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк рдкреНрд░реЙрдкрд░реНрдЯреА рдбреЗрд▓рд┐рдЧреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбрд╛рдпрд░реЗрдХреНрдЯ рд╕реЗ DKodein
(рдбрд╛рдпрд░реЗрдХреНрдЯ рд╕реЗ) рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдм рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ instance
, рдХреЙрд▓ рдХреЗ рд╕рдордп рдирд┐рд░реНрднрд░рддрд╛ рддреБрд░рдВрдд рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА , provider
рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпред рдЖрдк DKodein
рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рдХреЛрдбреАрди рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред class MyApplication : Application(), KodeinAware { override val kodein: Kodein = Kodein { bind<BigDecimal>() with singleton { BigDecimal.TEN } } val directKodein: DKodein = kodein.direct val directKodein2: DKodein = Kodein.direct { bind<BigDecimal>() with singleton { BigDecimal.ONE } } val someNumber:BigDecimal = directKodein.instance() val someNumber2:BigDecimal = directKodein2.instance()
рдХреЛрдбреАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ KodeinAware
, рдФрд░ DKodein
рдврд╛рдВрдЪреЗ DKodeinAware
рдореЗрдВ рдЖрдк рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдПрдХ рд╡рд╕реНрддреБ рд╕реЗ рдПрдХ Kodein
рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдХрдИ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдФрд░ рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреА рдЬрд╛рдВрдЪ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдмрд╛рдд рд╣реИ - рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░ рдпрд╣ рд╡рд╣ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ рдЬреЛ Android рдореЗрдВ рд╣реИ)редрдЯреИрдЧ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдЕрдВрддрд░:- рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ
- рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрдорд╛рдг рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрджрд░реНрдн рдЙрджрд╛рд╣рд░рдг рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ
рдЕрдХреНрд╕рд░, рд╕рдВрджрд░реНрдн рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ Kodein
рдпрд╣ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рджреЛ рддрд░реНрдХ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ Activity
рдФрд░ Presenter
, рдФрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Kodein
, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдХрд┐рд╕ рд╡рд░реНрдЧ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдиреЗрддреГрддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Activity
рдФрд░ Presenter
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП - рдЖрдк рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреАред рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ: class MyApplication : Application(), KodeinAware { override val kodein: Kodein = Kodein { bind<BigDecimal>() with contexted<CategoriesActivity>().provider { context.getActivityBigDecimal() } bind<BigDecimal>() with contexted<CategoriesPresenter>().factory { initialValue:BigDecimal -> context.getPresenterBigDecimal(initialValue) } } } class CategoriesActivity : Activity(), AppKodeinAware { fun getActivityBigDecimal() = BigDecimal("16.34") private val activityBigDecimal: BigDecimal by kodein.on(context = this).instance() } class CategoriesPresenter : AppKodeinAware { fun getPresenterBigDecimal(initialValue: BigDecimal) = initialValue * BigDecimal.TEN private val presenterBigDecimal: BigDecimal by kodein.on(context = this).instance(arg = BigDecimal("31.74")) }
рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрд╛рдиреЛрдВ рдХреЗ рдКрдкрд░ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИредрдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ with provider()
, рд▓реЗрдХрд┐рди with contexted<OurContextClass>().provider
, OurContextClass
рдХрдХреНрд╖рд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛рдВ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред contexted
рдХреЗрд╡рд▓ рдкреНрд░рджрд╛рддрд╛ рдпрд╛ рдХрд╛рд░рдЦрд╛рдиреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВредрдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЗрд╕ рд╕рдВрджрд░реНрдн рддрдХ рдкрд╣реБрдВрдЪ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдирд╛рдорд╛рдВрдХрд┐рдд рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ context
редрдХрд┐рд╕реА рд╕рдВрджрд░реНрдн рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ Kodein
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ on()
, рдФрд░ рдлрд┐рд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛редрдЗрд╕реА рддрд░рд╣, рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ injection
ред private val productApi: IProductApi by kodein.on(context = someContext).newInstance { ProductApi(instance(), instance()) } }
Android рдПрдХреНрд╕рдЯреЗрдВрд╢рди
рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ Android
ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдереА, рдЗрд╕рдХрд╛рдЙрдкрдпреЛрдЧ Kodein
рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╕рдм рдХреБрдЫ рдкрд░рд┐рдорд╛рдг рдХреЗ рдХреНрд░рдо рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВредрдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЛрдбреАрди
рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдЗрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд╣ рд╕рдВрдкрддреНрддрд┐ рдХреЛ Application
рд▓рд╛рдЧреВ рдХрд░рдиреЗ KodeinAware
рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рд╕реЗ Kodein
(рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Application
) рд╢реБрд░реВ рдХрд░реЗред рдмрджрд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдорд┐рд▓рддреА рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рд╕реЗ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ Application
, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╕рднреА рдЪреАрдЬреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ Context
ред рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ - рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред class MyApplication : Application(), KodeinAware { override val kodein = Kodein.lazy { import(androidModule(this@MyApplication))
рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ LayoutInflater
ред рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП - рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ редрдпрджрд┐ рдЖрдк рдПрдВрдбреНрд░реЙрдЗрдб рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд╣рд░ рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХреЗ рд╕рдВрджрд░реНрдн рд╕реЗ рдЕрд╡рдЧрдд рд╣реИрдВ, рддреЛ рд╕рдВрджрд░реНрдн рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред val inflater: LayoutInflater by kodein.on(context = getActivity()).instance()
рдирд┐рдХрдЯрддрдо Kodein рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛрджрд┐рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ()
рдпрд╣ рд╕рд░рд▓ рд╣реИ, рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ, рдХреБрдЫ рдСрдмреНрдЬреЗрдХреНрдЯ рджреВрд╕рд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реИ, рдлрд┐рд░ рдЯреБрдХрдбрд╝рд╛ рд╣реИред рдЖрдк рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ KodeinAware
, рдФрд░ рдПрдХ рдЖрд░рдВрдн рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ closestKodein()
рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг Kodein
рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Application
ред class MyActivity : Activity(), KodeinAware { override val kodein by closestKodein() val ds: DataSource by instance() }
closestKodein
рдЖрдк рдЗрд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд╣рд░ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдВрджрд░реНрдн рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ KodeinAware
, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ (рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдВрджрд░реНрдн рдкрд╛рд╕ рдХрд░реЗрдВ kcontext()
)ред class MyController(androidContext: Context) : KodeinAware { override val kodein by androidContext.closestKodein() override val kodeinContext = kcontext(androidContext) val inflater: LayoutInflater by instance() }
рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреЛрдбреАрди рдмрдирд╛рдПрдВ
рдпрд╣ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдореВрд▓ рдХреЛрдбрд┐рди рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред class MyActivity : Activity(), KodeinAware { private val parentKodein by closestKodein() override val kodein: Kodein by Kodein.lazy { extend(parentKodein) } }
рдХреЛрдбреАрди рдЬреЛ рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ
рд╣рд╛рдБ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рд╣реИ retainedKodein
ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, Kodein
рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред class MyActivity : Activity(), KodeinAware { private val parentKodein by closestKodein() override val kodein: Kodein by retainedKodein { extend(parentKodein) } }
рд▓реЗрдЦ рдореЗрдВ рдХреНрдпрд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ?
рдореИрдВрдиреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдореИрдВ рдЦреБрдж рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВред рдпрд╣рд╛рдВ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдЬрд╛рдирдХрд░ рдЖрдк рд╕реНрд╡рдпрдВ рдХреНрдпрд╛ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ:- рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░
- рдЙрджрд╛рд╣рд░рдг рдмрд╛рдБрдзрдирд╛
- рдорд▓реНрдЯреА рдмрд╛рдзреНрдпрдХрд╛рд░реА
- рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрд▓рдмреИрдХ
- рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд
- рдорд┐рдЯрд╛рдпрд╛ рд╣реБрдЖ рд╕рдВрд╕реНрдХрд░рдг рдиреБрдХрд╕рд╛рди
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреЛрдбреАрди
- рдЬреЗрдПрд╕рдЖрд░ -330 рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ:рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛!