рдбреИрдЧрд░ 2 рдкреНрд░рд╛рдердорд┐рдХ рд╣реИ (рднрд╛рдЧ 1)

рд╕рд╛рдордЧреНрд░реА

  1. рдкрд░рд┐рдЪрдп
  2. рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреНрдпрд╛ рд╣реИ, рдирд┐рд░реНрднрд░рддрд╛ рдЙрджрд╛рд╣рд░рдг
  3. рдбреИрдЧрд░ 2 - рдкрд░рд┐рдЪрдп
  4. рдбреИрдЧрд░ 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 рдХреНрд▓рд╛рд╕ рдорд┐рд▓рддреА рд╣реИред

 // Generated by Dagger (https://google.imtqy.com/dagger). package com.example.dagger2; public final class DaggerDaggerComponent implements DaggerComponent { private DaggerDaggerComponent(Builder builder) {} public static Builder builder() { return new Builder(); } public static DaggerComponent create() { return new Builder().build(); } @Override public Car getCar() { return new Car(getEngine()); } @Override public Engine getEngine() { return new Engine(new Fuel()); } @Override public Fuel getFuel() { return new Fuel(); } public static final class Builder { private Builder() {} public DaggerComponent build() { return new DaggerDaggerComponent(this); } } } 

рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рдЖрдЗрдП MainActivity рдореЗрдВ рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

 private var car: Car = DaggerDaggerComponent.create().getCar() 

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рдХрд╛рд░ рдлрд╝реАрд▓реНрдб рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рд╕реНрд░реЛрдд рдХреЛрдб

Source: https://habr.com/ru/post/hi466725/


All Articles