рд╕рд╛рдордЧреНрд░реА
- рдкрд░рд┐рдЪрдп
- рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреНрдпрд╛ рд╣реИ, рдирд┐рд░реНрднрд░рддрд╛ рдЙрджрд╛рд╣рд░рдг
- рдбреИрдЧрд░ 2 - рдкрд░рд┐рдЪрдп
- рдбреИрдЧрд░ 2 рдХрд╛ рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧ
рдкрд░рд┐рдЪрдп
рд▓реЗрдЦ рдПрдХ рдЙрдиреНрдирдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рди, рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рд▓реЗрдЦ рдХреЛрдЯрд▓рд┐рди рдирдореВрдирд╛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдбреИрдЧрд░ рд╕рдВрд╕реНрдХрд░рдг 2.17ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреНрдпрд╛ рд╣реИ?
рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди (рдЗрдВрдЬреЗрдХреНрд╢рди рдпрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди) рджреВрд╕рд░реЗ рдкрд░ рдПрдХ рд╡рд░реНрдЧ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╣реИред рдпрд╛рдиреА рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдкреВрд░реНрдг рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЗ (рдЙрдирдХреЗ) рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд░ рд╡рд░реНрдЧ (рдХрд╛рд░) рдЗрдВрдЬрди рд╡рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдИрдВрдзрди рд╡рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
class Car(private var engine: Engine) class Engine ( private var fuel: Fuel) class Fuel(){ private val fuel = if(BuildConfig.DEBUG){ тАЬbenzineтАЭ } else { тАЬdieselтАЭ } }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрд╛рд░ рд╡рд░реНрдЧ рдЗрдВрдЬрди рд╡рд░реНрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрджрд▓реЗ рдореЗрдВ, рдИрдВрдзрди рд╡рд░реНрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдбреИрдЧрд░ 2 - рдкрд░рд┐рдЪрдп
рдбреИрдЧрд░ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ:ред рдпрд╣ рдПрдХ google рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рд╡рд┐рд╕реНрддреГрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ ред
рдЦрдВрдЬрд░ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдореБрдЭреЗ рдХрдо рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
- рд╕рдВрд░рдЪрдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
- рдЬрдм рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ
- рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЦрдВрдЬрд░ рдХреА рд╡рд┐рдкрдХреНрд╖:
- рд╡рд┐рд╕реНрддреГрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╛ рдЕрднрд╛рд╡
- рдбреИрдЧрд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЗрд░рд╛рджреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рдЖрдкрдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ
- рдбреИрдЧрд░ рдХреЛрдб рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╕реНрдкреЙрдЯ рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рд╣реА рдХрдард┐рди рд╣реИ
рдбреИрдЧрд░ 2 рдХрд╛ рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдбреИрдЧрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ 2 рддрд░реАрдХреЗ рд╣реИрдВ
1. build.gradle (рдРрдк) рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдХ рдЯреНрд░реЗрд╕ рдЬреЛрдбрд╝реЗрдВред
1.1 рдкреНрд▓рдЧрдЗрди рдШреЛрд╖рдгрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдмрд╣реБрдд рдКрдкрд░
apply plugin: 'kotlin-kapt'
рдирд┐рд░реНрднрд░рддрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ 1.2
{ ... kapt "com.google.dagger:dagger-compiler:$dagger_version" implementation "com.google.dagger:dagger:$dagger_version" }
рдореИрдВ рдЦрдВрдб рдореЗрдВ рдбреИрдЧрд░ (рдбреИрдЧрд░_рд╡рд░реНрд╕рди) рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ
ext { dagger_version = '2.17' }
рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реЗрдХреНрд╢рди рдХреЗ рдКрдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
2. рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд╡реЗрди рднрдВрдбрд╛рд░ рдЬреЛрдбрд╝реЗрдВ - рдирд┐рд░реНрднрд░рддрд╛ - рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВ
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдбреИрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд╛рд░, рдЗрдВрдЬрди рдФрд░ рдИрдВрдзрди рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдПрдВ:
class Car constructor(private var engine: Engine) class Engine constructor(private var fuel: Fuel) class Fuel { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } }
рдХрд╛рд░, тАЛтАЛрдЗрдВрдЬрди рдФрд░ рдИрдВрдзрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдбреИрдЧрд░ рдЗрдВрдЬреЗрдХреНрдЯ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдбреИрдЧрд░ рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрдВ рдЯреНрд░реЗрд╕ рдорд┐рд▓рддрд╛ рд╣реИред
class Car @Inject constructor(private var engine: Engine) class Engine @Inject constructor(private var fuel: Fuel) class Fuel @Inject constructor() { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } }
рдбреИрдЧрд░ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрди рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ (рдЗрдВрдЬреЗрдХреНрдЯ),
рдШрдЯрдХ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдбреИрдЧрд░рдХрдВрдкреЛрдиреЗрдВрдЯ) рдХреЗ рд▓рд┐рдП рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
@Component interface DaggerComponent { fun getCar(): Car fun getEngine(): Engine fun getFuel(): Fuel }
рдШрдЯрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╡реЗ рд▓реМрдЯрддреЗ рд╣реИрдВред
рдЗрд╕ рдХрджрдо рдкрд░, рдЖрдкрдХреЛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ (рдмрд┐рд▓реНрдб - рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдбреИрдЧрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдлреИрдХреНрдЯреНрд░реА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдирд╛рдо рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдбреИрдЧрд░ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЙрдкрд╕рд░реНрдЧ "рдбреИрдЧрд░" рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рдд рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ DaggerDaggerComponent рдХреНрд▓рд╛рд╕ рдорд┐рд▓рддреА рд╣реИред
рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рдЖрдЗрдП MainActivity рдореЗрдВ рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
private var car: Car = DaggerDaggerComponent.create().getCar()
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рдХрд╛рд░ рдлрд╝реАрд▓реНрдб рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рд╕реНрд░реЛрдд рдХреЛрдб