ã¿ãªããããã«ã¡ã¯ïŒ æè¿ãAndroidçšã®ã³ãŒãã®èšè¿°ã倧å¹
ã«ä¿é²ããå€ãã®ããŒã«ãšã©ã€ãã©ãªãç»å ŽããŸããã ãã¹ãŠã远跡ãããã¹ãŠãè©ŠããŠãã ããã ãã®ãããªããŒã«ã®1ã€ãDagger 2ã©ã€ãã©ãªã§ãã
ãããã¯ãŒã¯ã¯ãã§ã«ãã®ã©ã€ãã©ãªã®å€ãã®ç°ãªãè³æã§ãã ããããç§ãDagger 2ã«ç²Ÿéãå§ãããšããèšäºãèªãã§ã¬ããŒããèŠããšãããããã¹ãŠã«å
±éããæ¬ ç¹ã1ã€èŠã€ãããŸãããããããã©ã®ããã«ãæäŸãããããããããŠããã§äœãèµ·ãã£ãŠããã®ãã ãªã¹ããŒ/ãªãŒããŒã®å Žåãéåžžãæ°ãã泚éãå«ã倧éã®ã³ãŒããããã«æãèœã¡ãŸãã ãããŠãã©ããããããæ©èœããŸããã ãã®çµæãç§ã®é ã®äžã®ã¬ããŒã/èšäºã®åŸããã¹ãŠãç解ã§ããåäžã®åçã«ãŸãšããããšãã§ããŸããã§ããã
ä»ãæ¯ãè¿ã£ãŠã¿ããšããã®æç¹ã§ããäœãã©ããã©ãã§ããæ確ã«ç€ºãåçã衚瀺ãããŠããªãã£ãããšãããããŸãã ãããã£ãŠãç§ã®äžé£ã®èšäºã§ã¯ããã®ã®ã£ãããåããããšããŸãã ãããåå¿è
ãDagger 2ãããããç解ããããšèããŠãããã¹ãŠã®äººã«åœ¹ç«ã¡ãèªåã®ãããžã§ã¯ãã§è©ŠããŠã¿ãããšã«ãããã§ãã ç§ã¯ããã«ããã䟡å€ããããšèšãããšãã§ããŸãã
ãããæåã¯1ã€ã®èšäºãæžãããã£ãã®ã§ãããã©ããããããå€ãã®è³æãšåçããã£ãã®ã§ãèªè
ãåŸã
ã«ãããã¯ã«é£ã³èŸŒããããã«ãæ
å ±ãå°ããã€åºããŠãããŸãã
çè«
çè«çãªåŽé¢ãç°¡åã«èŠãŠãããŸãããã
Dagger 2ã¯ãéçºè
ãDependency Injectionãã¿ãŒã³ãå®è£
ããã®ãæ¯æŽããã©ã€ãã©ãªãŒã§ãããããã¯ãå¶åŸ¡ã®å転ã®ç¹å®ã®åœ¢åŒãã§ãã
çµå¶ã®å転ã®åå
- äžäœã¢ãžã¥ãŒã«ã¯äžäœã¢ãžã¥ãŒã«ã«äŸåããªãã§ãã ããã äž¡æ¹ã®ã¬ãã«ã®ã¢ãžã¥ãŒã«ã¯æœè±¡åã«äŸåããå¿
èŠããããŸãã
- æœè±¡åã¯è©³çŽ°ã«äŸåãã¹ãã§ã¯ãããŸããã 詳现ã¯æœè±¡åã«äŸåããå¿
èŠããããŸãã
å¶åŸ¡ã®å転ã䜿çšããããšã«ããé€å»ãããèšèšäžã®æ¬ é¥
- åæ§ã 1ã€ã®ã¢ãžã¥ãŒã«ãå€æŽãããšãä»ã®ã¢ãžã¥ãŒã«ãå€æŽãããŸãã
- è匱æ§ã 1ã€ã®éšåãå€æŽãããšãããã°ã©ã ã®ä»ã®éšåã§å¶åŸ¡äžèœãªãšã©ãŒãçºçããŸãã
- äžåã ã¢ãžã¥ãŒã«ã¯ãåå©çšã®ããã«ã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåããåé¢ããã®ãå°é£ã§ãã
äŸåæ§æ³šå
¥ïŒDIïŒ
ãœãããŠã§ã¢ã³ã³ããŒãã³ãã«å€éšäŸåé¢ä¿ãæäŸããããã»ã¹ã ããã¯ãäŸåé¢ä¿ç®¡çã«é©çšãããå Žåã®å¶åŸ¡ã®å転ïŒIoCïŒã®ç¹å®ã®åœ¢åŒã§ãã åäžã®çŸ©åã®ååã«å®å
šã«åŸã£ãŠããªããžã§ã¯ãã¯ããã®äžè¬çãªã¡ã«ããºã ã®ããã«ç¹å¥ã«èšèšãããå€éšã«å¿
èŠãªäŸåé¢ä¿ãæ§ç¯ããããšã«æ³šæãæããŸãã
ãã®ãããDagger 2ã¯ãã®å
±éã®ã¡ã«ããºã ãäœæããã ãã§ãã
IoCãDIãããã³ãããã®çžäºé¢ä¿ã«ã€ããŠã®è³ªåãšããªããŒãäºæ³ããå®çŸ©ã¯ãŠã£ãããã£ã¢ããåããããã®ã§ããã詳现ãªè°è«ã¯èšäºã®ç¯å²å€ã§ãããšä»ãå ããŸãã
次ã«ãã©ã€ãã©ãªã®äž»ãªå©ç¹ããªã¹ãããŸãã
Dagger 2ã®å©ç¹
- ãå
±æãå®è£
ãžã®ç°¡åãªã¢ã¯ã»ã¹ã
- è€éãªäŸåé¢ä¿ã®ç°¡åãªã»ããã¢ããã ã¢ããªã±ãŒã·ã§ã³ãããã°ããã»ã©ãäŸåé¢ä¿ãå¢ããŸãã Dagger 2ã§ã¯ããã¹ãŠã®äŸåé¢ä¿ãç°¡åã«å¶åŸ¡ã§ããŸãã
- åäœãã¹ããšçµ±åãã¹ããä¿é²ããŸãã ãã®åé¡ã«ã€ããŠã¯ãDagger 2ã䜿çšãããã¹ãã«é¢ããèšäºã§èª¬æããŸãã
- ãããŒã«ã«ãã·ã³ã°ã«ããŒã³ã
- ã³ãŒãçæã çµæã®ã³ãŒãã¯ç解å¯èœã§ããããããã°ã«äœ¿çšã§ããŸãã
- é£èªåã«åé¡ã¯ãããŸããã 5çªç®ãš6çªç®ã®æ®µèœã¯äž¡æ¹ãšãããã¬ãŒã®2çªç®ã®ããŒãžã§ã³ãšæåã®ããŒãžã§ã³ã®éç«ã£ãç¹åŸŽã§ãã ãã¬ãŒ1ã¯åå°ã«åãçµãã ã ãããã£ãŠãããã©ãŒãã³ã¹ãé£èªåãäžå¯è§£ãªåé¡ã¯å®è¡æã«äœäžããŸãã
- å°ããã©ã€ãã©ãªãµã€ãº
ãå
±æãå®è£
ãžã®ç°¡åãªã¢ã¯ã»ã¹ã®äŸãšããŠãã³ãŒãã瀺ããŸãã
public class MainActivity extends AppCompatActivity { @Inject RxUtilsAbs rxUtilsAbs; @Inject NetworkUtils networkUtils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); App.getComponent().inject(this); } }
ã€ãŸãã App.getComponent().inject(this);
ã¢ãããŒã·ã§ã³ããã£ãŒã«ãã«è¿œå ããã App.getComponent().inject(this);
è¡ãonCreate
ã¡ãœããã«è¿œå ããApp.getComponent().inject(this);
ã ãããŠä»ã RxUtilsAbs
ãšNetworkUtils
æ¢è£œã®å®è£
ãRxUtilsAbs
NetworkUtils
å©çšã§ããŸãã
ããããã¹ãŠã®å©ç¹ã«ãããDagger 2ã¯çŸæç¹ã§Androidã«DIãå®è£
ããããã®æé©ãªã©ã€ãã©ãªã«ãªã£ãŠããŸãã
ãã¡ãããã©ã€ãã©ãªã«ã¯æ¬ ç¹ããããŸãã ãã ããäžé£ã®èšäºã®æåŸã§ãããã«ã€ããŠèª¬æããŸãã ããŠãç§ã®ä»äºã¯ããªãã«èå³ãæãããDagger 2ãè©ŠããŠã¿ãããšã§ãã
Dagger 2ã®éèŠãªèŠçŽ ïŒæ³šéïŒïŒ
@Inject
ãäŸåé¢ä¿ãèŠæ±ããããåºæ¬çãªæ³šé@Module
ã¡ãœããããäŸåé¢ä¿ãæäŸãããã¯ã©ã¹@Provide
å
ã®@Module
ããäŸåé¢ä¿ãæ§ç¯ããŠæäŸããæ¹æ³ãDaggerã«äŒããã@Component
ãš@Module
éã®ããªããž@Scope
ã°ããŒãã«ããã³ãããŒã«ã«ã·ã³ã°ã«ãã³ããäœæããæ©èœãæäŸããŸã@Qualifier
åãã¿ã€ãã®ç°ãªããªããžã§ã¯ããå¿
èŠãªå Žå
çŸæç¹ã§ã¯ãäžè¬çãªåç
§ã®ããã«ãããã®æ³šéã確èªããŠãã ããã ããããã«ã€ããŠè©³ãã説æããŸãã
å®éãçè«çã«ã¯ãããã«éå®ããŠããŸãã 詳现ã«ã€ããŠã¯ãèšäºã®æåŸã«ãããªã³ã¯ãã芧ãã ããã
äž»ãªç®æšã¯ãDagger 2ã䜿çšããŠäŸåé¢ä¿ã°ã©ãå
šäœãã©ã®ããã«æ§ç¯ãããããç解ããããšã§ãã
ç·Žç¿ãã
ããã«èå³æ·±ãããšãå§ãŸããŸãã
ç¹å®ã®äŸãèããŠã¿ãŸãããã 誰ããã¢ããªã«ã·ã³ã°ã«ããŒã³ãæã£ãŠããŸãã Androidã§ã¯ãã¢ã¯ãã£ããã£ãšãã©ã°ã¡ã³ãã®ã©ã€ããµã€ã¯ã«ãèãããšããããããªããã°ã©ãã«ããããŸããã
åæã«ãå©çšå¯èœãªã·ã³ã°ã«ããŒã³ã2ã€ã®ã«ããŽãªã«åå²ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®ä»»æã®å Žæã§å¿
èŠã«ãªãå¯èœæ§ã®ãããã°ããŒãã«ãªãã·ã³ã°ã«ããŒã³ã ãããã«ã¯ãã³ã³ããã¹ãããŠãŒãã£ãªãã£ã¯ã©ã¹ãããã³ã¢ããªã±ãŒã·ã§ã³å
šäœã®åäœã«åœ±é¿ããä»ã®ã¯ã©ã¹ãå«ãŸããŸãã
- ç¹å®ã®1ã€ä»¥äžã®ã¢ãžã¥ãŒã«ã§ã®ã¿å¿
èŠãªãããŒã«ã«ãã·ã³ã°ã«ããŒã³ã ããããç»é¢ããã®ä»ã®æ¹åãå€æŽãããå¯èœæ§ããããããå€ãã®å Žåãã©ã€ããµã€ã¯ã«ã«äŸåããªãå Žæã«ããžãã¯ãšããŒã¿ã®äžéšã移åããå¿
èŠããããŸãã ãããŒã«ã«ãã·ã³ã°ã«ãã³ã«ã€ããŠã¯ã次ã®èšäºã§ãã詳现ãã€æŠç¥çã«èª¬æããŸãã
ãã°ããŒãã«ãªãã·ã³ã°ã«ããŒã³ããå§ããŸãããã éåžžã¯ã©ã®ããã«äœ¿çšããŸããïŒ ã»ãšãã©ã®å Žåã次ã®ã³ãŒããå®è¡ããããšæããŸãã
SomeSingleton.getInstance().method();
äžè¬çãªæ
£è¡ã ããããDIãã¿ãŒã³ãé©çšãããå Žåããã®ã³ãŒãã¯ããã€ãã®çç±ã§ååã§ã¯ãããŸããã
- ãã®ãããªåŒã³åºãã䜿çšããã¯ã©ã¹ã§ã¯ã
SomeSingleton
ã¯ã©ã¹ãžã®äŸåé¢ä¿ãçªç¶çºçããŸãã ããã¯æé»çãªäŸåé¢ä¿ã§ãããã©ãã«ãæ確ã«ç€ºãããŠããŸããïŒã³ã³ã¹ãã©ã¯ã¿ãŒããã£ãŒã«ããã¡ãœããã®ãããã«ããããŸããïŒã ãããã£ãŠãç¹å®ã®ã¡ãœããã®ã³ãŒããèŠãã ãã§ãã®ãããªäŸåé¢ä¿ã確èªã§ããŸãããŸãããã®SomeSingleton
ãããã§äœ¿çšãããŠããããšãã¯ã©ã¹ã€ã³ã¿ãŒãã§ã€ã¹ã§ç¥ãããšã¯ã§ããŸããã - åæåããã»ã¹ã¯
SomeSingleton
ã«ãã£ãŠåŠçããSomeSingleton
ã é
延åæåã䜿çšãããå Žåã SomeSingleton
ïŒæåã«åŒã³åºãããå ŽæïŒã䜿çšããŠã¯ã©ã¹ã®1ã€ãåæåããããã»ã¹ãéå§ãããŸãã ã€ãŸããã¯ã©ã¹ã¯ãäœæ¥ã«å ããŠãã·ã³ã°ã«ãã³ã®åæåãéå§ãã圹å²ãæãããŸãã - ãã®ãããªã·ã³ã°ã«ããŒã³ã®æ°ãå¢ãããšãã·ã¹ãã ã¯æé»çãªäŸåé¢ä¿ã®ãããã¯ãŒã¯ã§èŠãããŸãã ããã€ãã®ã·ã³ã°ã«ããŒã³ã¯ä»ã®ã·ã³ã°ã«ããŒã³ã«äŸåããå ŽåããããŸãããããã¯ãããã®ãããªãã¡ã³ããã³ã¹ãåçŽåããŸããã ããã«ãã·ã³ã°ã«ããŒã³ã¯ã·ã¹ãã å
šäœã«æ£ãã°ã£ãŠãããç°ãªãããã±ãŒãžã«å«ãŸããŠããå¯èœæ§ããããããã«ããäžäŸ¿ãçããŸãã
ãã¡ãããããããã¹ãŠã§ãããªãã¯çããããšãã§ããŸãã ç°¡åã§ã¯ãããŸããããå¯èœã§ãã ããããã³ãŒãããŠããããã¹ãã§ãªãŒããŒã¬ã€ããå Žåããã¹ãŠãæ ¹æ¬çã«å€åãå§ããŸãã ããã§ã¯ããããã®æé»çãªäŸåé¢ä¿ã䜿çšããŠäœããè¡ãå¿
èŠããããäœããã®åœ¢ã§ããããæ£ããã眮æãã«ããŸãã ã³ãŒããããã¹ãã³ãŒããã«èªç±ã«å€æãå§ããŸãããæé»çãªäŸåé¢ä¿ããããããéçŸå®çã§ãã
ãããŠä»ãDagger 2ã«ã€ããŠïŒèšäºã®éäžã§ãç§ã¯ãã·ã¢èªã§åã«ãDaggerããšåŒã¶ããšããããŸãïŒã 次ã«ãDagger 2ã䜿çšããŠãDIã«ã·ã³ã°ã«ããŒã³ãå®è£
ããæ¹æ³ã説æããŸãã åæã«ãäŸåé¢ä¿ã°ã©ããäœæãããµã€ã¯ã«å
šäœã衚瀺ãããŸãã
ãã°ããŒãã«ãªãã·ã³ã°ã«ããŒã³ããå§ããŸãããã
ã·ã³ã°ã«ããŒã³ãäœæãã

æãåºããšã @Module
ã¯ãã¡ãœããããäŸåé¢ä¿ãæäŸãããã¯ã©ã¹ïŒãäŸåé¢ä¿ãæäŸãããïŒãããŒã¯ãã泚éã§ãã å°æ¥ããã®ãããªã¯ã©ã¹ãåã«ã¢ãžã¥ãŒã«ãšåŒã³ãŸãã ãŸãããäŸåé¢ä¿ãæäŸããããŸãã¯ãäŸåé¢ä¿ãæäŸãããã¡ãœããã¯ãæäŸã¡ãœãããšåŒã°ããŸãã
ããšãã°ã ReceiversModule
ã«ã¯ãã¿ã€ãNetworkChannel
ãªããžã§ã¯ããæäŸããã ãã®provideNetworkChannel
ã¡ãœããããããŸãã ãã®ã¡ãœããã¯å®éã«ã¯äœã§ãåŒã³åºãããšãã§ããŸããæãéèŠãªããšã¯ãã¡ãœãããšæ»ãå€ã®ã¿ã€ãïŒ NetworkChannel
ïŒã®åã®@Provides
ã¢ãããŒã·ã§ã³ã§ãã
æ»ãå€ã®åãã€ã³ã¿ãŒãã§ã€ã¹ãŸãã¯æœè±¡ã¯ã©ã¹ïŒ RxUtilsAbs
ïŒã§ãããã¡ãœããå
ã§ç®çã®å®è£
ïŒ RxUtils
ïŒãæ¢ã«åæåããŠè¿ãå Žåãäžè¬çãªæ¹æ³ã§ãã
以äžã®@Singleton
ã¢ãããŒã·ã§ã³ã«ã€ããŠã泚æãæããŸã§ã
ãŸããã¢ãžã¥ãŒã«ã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã§ãå¿
èŠãªãªããžã§ã¯ããæž¡ãããšãã§ããŸãã äŸã¯AppModule
ã§ãã
ãããŠã UtilsModule
ãã§ã«èå³æ·±ããã®ã§ãã äŸåé¢ä¿RxUtilsAbs
ããã³NetworkUtils
ãæäŸããã«ã¯ãã¿ã€ãContext
ããã³NetworkChannel
ãªããžã§ã¯ããå¿
èŠã§ãã ãããã£ãŠã NetworkUtils
NetworkChannel
ãšNetworkUtils
NetworkChannel
äœæãããšãã«ã RxUtilsAbs
ãšNetworkUtils
å¿
èŠã§ããããšãäœããã®æ¹æ³ã§Daggerã«äŒããå¿
èŠãããNetworkChannel
ã ãããè¡ãã«ã¯ã provideNetworkUtils
ã¡ãœãããšprovideNetworkUtils
ã¡ãœããã«åŒæ°ãè¿œå ãããŸããæåã®Context context, NetworkChannel networkChannel
2çªç®ã®Context context, NetworkChannel networkChannel
ã§ãã
ãã®å ŽåãåŒæ°ã®ååã¯anyãå°ãªããšãcontext
ãå°ãªããšãcontextSuper
ãéãã¯ãããŸããã äž»ãªãã®ã¯åŒæ°ã®ã¿ã€ãã§ãã

次ã«ã泚éä»ãã®AppComponent
ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸã
@Component(modules = {AppModule.class, UtilsModule.class, ReceiversModule.class})
ã
䟿å®äžããã®ãããªã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ããŒãã³ããåŒã³åºããŸãã
äžèšã®ããã«ã @Component
ã¯æ¬è³ªçã«@Module
ãš@Inject
éã®ããªããžã§ãã èšãæããã°ãã³ã³ããŒãã³ãã¯æ¢æã®äŸåé¢ä¿ã°ã©ãã§ãã ããã¯ã©ãããæå³ã§ããïŒ ããå°ãç解ããŠãã ããã
ãã®ã¢ãããŒã·ã§ã³ã䜿çšããŠã AppModule, UtilsModule, ReceiversModule
3ã€ã®ã¢ãžã¥ãŒã«ãAppComponent
å«ãŸããŠããããšãDaggerã«äŒããŸãã ãããã®åã¢ãžã¥ãŒã«ãæäŸããäŸåé¢ä¿ã¯ã AppComponent
ã³ã³ããŒãã³ãã®åŸæŽã®äžã§çµåãããä»ã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ã§å©çšã§ããŸãã æ確ã«ããããã«ãå³ãèŠãŠãã ããã

ãã®å³ã®å©ããåããŠãDaggerãContext
ããã³NetworkChannel
ãRxUtilsAbs
ããã³NetworkUtils
ãæ§ç¯ããRxUtilsAbs
ãããæ確ã«ãªããšNetworkChannel
ã ããšãã°ãã³ã³ãã€ã«æã«ã³ã³ããŒãã³ãã®æ³šéããAppModule
ã¢ãžã¥ãŒã«ãåé€ãããšãDaggerã¯Context
ãªããžã§ã¯ããååŸã§ããå Žæãèªã£ãŠå°ããŸãã
ãŸããã€ã³ã¿ãŒãã§ã€ã¹å
ã§void inject(MainActivity mainActivity)
ã¡ãœããvoid inject(MainActivity mainActivity)
ã宣èšãvoid inject(MainActivity mainActivity)
ã ãã®ã¡ãœããã䜿çšããŠã泚å
¥ããã¯ã©ã¹ãã¯ã©ã¹ã«æå®ããŸãã
MainActivity
以å€ã®å¥ã®ã¯ã©ã¹ïŒããšãã°SecondActivity
ïŒã«äŸåé¢ä¿ã泚å
¥ããå¿
èŠãããå Žåã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã§æ確ã«æå®ããå¿
èŠãããããšãè¿œå ããŸãã äŸãã°
@Component(modules = {AppModule.class, UtilsModule.class, ReceiversModule.class}) @Singleton public interface AppComponent { void inject(MainActivity mainActivity); void inject(SecondActivity secondActivity); }
åŒæ°ã®ååã¯äœã§ãmainActivity
ãïŒ mainActivity
ãactivity
ã«å€æŽãããªã©ïŒã 泚å
¥ãããªããžã§ã¯ãã®æãéèŠãªã¿ã€ãïŒ ãããŠããäŸåé¢ä¿ãæããããã¹ãŠã®ã¯ã©ã¹ã«å¯ŸããŠåã®äžè¬åã䜿çšããããšã¯äžå¯èœã§ãã
@Component(modules = {AppModule.class, UtilsModule.class, ReceiversModule.class}) @Singleton public interface AppComponent { void inject(Object object); }
Dagger 2ã¯ãªãã¬ã¯ã·ã§ã³ã§ã¯ãªãã³ãŒãçæã§æ©èœããããã§ãïŒ ã¿ã€ãã¯åžžã«æ確ã«æå®ããå¿
èŠããããŸãïŒ

ããã«é²ãã§ããŸãã AppComponent
ã§ã¯ã MainActivity
ã¯ã©ã¹ãã€ã³ãžã§ã¯ã·ã§ã³MainActivity
ãŸãã ãã®ã¯ã©ã¹ã§ã¯ã AppModule, UtilsModule, ReceiversModule
ã¢ãžã¥ãŒã«ã«ãã£ãŠæäŸãããäŸåé¢ä¿ã䜿çšã§ããŸãã ãããè¡ãã«ã¯ãé©åãªãã£ãŒã«ããã¯ã©ã¹ã«è¿œå ãã @Inject
ã¢ãããŒã·ã§ã³ã§ããŒã¯ããå°ãªããšããããã§äœ¿çšå¯èœã«ããŸãïŒãã£ãŒã«ããprivate
ã«èšå®ãããŠããå ŽåãDaggerã¯ãã®ãã£ãŒã«ãã®ç®çã®å®è£
ã眮ãæããããšãã§ããŸããïŒã
ãŸãã RxUtilsAbs rxUtilsAbs
RxUtils
眮ãæããããŠããããšã«æ³šæããŠãã ããïŒ RxUtils
ã¯RxUtils
ã®åŸç¶RxUtilsAbs
ïŒãã€ãŸãã UtilsModule
ã¢ãžã¥ãŒã«ã§èšå®ããUtilsModule
ã§ãã
次ã«ã onCreate
ã¡ãœããã§è¡ãè¿œå ããŸã
App.getComponent().inject(this);
AppComponent
äœæãæ€èšããŠãããããã³ã³ããŒãã³ãAppComponent
ãApplication
ã¯ã©ã¹ã«ä¿åããããšããAppComponent
ãApplication
ã ãã®äŸã§ã¯ã App.getComponent()
ä»ããŠApp.getComponent()
ã¢ã¯ã»ã¹ã§ããŸãã
inject(MainActivity mainActivity)
ã¡ãœããinject(MainActivity mainActivity)
åŒã³åºãããšã«ãããæçµçã«äŸåé¢ä¿ã°ã©ãããã€ã³ãããŸãã ãããã£ãŠãAppComponentã¢ãžã¥ãŒã«ïŒ Context
ã NetworkChannel
ã RxUtilsAbs
ã NetworkUtils
ïŒãæäŸãããã¹ãŠã®äŸåé¢ä¿ãRxUtilsAbs
ã§å©çšå¯èœã«ãªããŸãã
App
ã¯ã©ã¹ã®buildComponent()
ã¡ãœããã«æ³šæããŠbuildComponent()
ã DaggerAppComponent
ã¯ãã³ã³ãã€ã«åã«ã¯äœ¿çšã§ããŸããã
ãã®ãããæåã¯IDEã«æ³šæãæããŸãããIDEã«ã¯ã DaggerAppComponent
ã¯ã©ã¹DaggerAppComponent
ååšDaggerAppComponent
ãªããšè¡šç€ºãããŸãã ããŠãIDEã§ããããã«ããŒã®ãã«ãæã«ããã³ãââãã衚瀺ããŸããã ãã®ããã AppComponent
ããAppComponent
ã®åæåã¯ãæåã«ããã©ã€ã³ãã§ãèšè¿°ããå¿
èŠããããŸãã
ãšããã§ã buildComponent()
ã³ãŒãã¯ççž®ã§ããŸãïŒ
protected AppComponent buildComponent() { return DaggerAppComponent.builder() .appModule(new AppModule(this)) .build(); }
å
ã»ã©è¿°ã¹ãããã«ãDagger 2ã¯äŸåé¢ä¿ã°ã©ãå
šäœã®äœæãæ
åœããŸãã åé¡ãçºçããå Žåãã³ã³ãã€ã«æã«éç¥ãããŸãã ããšãã°ãDagger 1ã®å Žåã®ããã«ãå®è¡æã«äºæãã¬äžå¯è§£ãªèœäžã¯ãããŸããã
次ã®å³ãèŠãŠãã ããïŒ

ãµãµãæ¯ãåãããšãã§ããŸãïŒ æã飜åããéšåãåŸãã«ãããŸãã ãã®å³ã¯æ¬¡ã®ããšãæ確ã«ç€ºããŠããããã§ãã
- ã¢ãžã¥ãŒã«ã¯äŸåé¢ä¿ãæäŸããŸãã ã€ãŸããæäŸãããªããžã§ã¯ããèŠå®ããã®ã¯ã¢ãžã¥ãŒã«ã§ãã
- ã³ã³ããŒãã³ãã¯äŸåé¢ä¿ã°ã©ãã§ãã ã¢ãžã¥ãŒã«ãçµã¿åãããå¿
èŠãªã¯ã©ã¹ã«äŸåé¢ä¿ãæäŸããŸãïŒ
MainActivity
ïŒ
äœããæ確ã§ãªãããæ瀺çã§ãªãå Žåã¯ãã³ã¡ã³ããæžããä¿®æ£ããŠèª¬æããŠãã ããïŒ
æåŸã«ã @Singleton
ã¢ãããŒã·ã§ã³ãæ€èšããŸãã ããã¯ãDaggerãæäŸããã¹ã³ãŒãã¢ãããŒã·ã§ã³ã§ãã äŸåé¢ä¿ãæäŸããã¡ãœããã®åã«@Singleton
ã眮ããšãDaggerã¯ãã³ã³ããŒãã³ããåæåãããšãã«ãããŒã¯ãããäŸåé¢ä¿ã®åäžã®ã€ã³ã¹ã¿ã³ã¹ãã€ãŸãã·ã³ã°ã«ãã³ãäœæããŸãã ãããŠããã®äŸåé¢ä¿ã®åãªã¯ãšã¹ãã§ããã®åäžã®ã€ã³ã¹ã¿ã³ã¹ãæäŸããŸãã
èšèãæžãããåçããã£ãšïŒ

åäŸåé¢ä¿ã¯@Singleton
ã¢ãããŒã·ã§ã³ã§æäŸãããŸãã ããã¯ãDaggerããã®äŸåé¢ä¿ã䜿çšããå¿
èŠããããã³ã«ã ãã®ã€ã³ã¹ã¿ã³ã¹ã1ã€ã ã䜿çšããããšãæå³ããŸã ã

æ¯èŒã®ããã«ã provideNetworkChannel
ã¡ãœããããprovideNetworkChannel
ã¢ãããŒã·ã§ã³ãåé€ãprovideNetworkChannel
ïŒäŸåé¢ä¿ã¯ã provideNetworkChannel
ãªããã«ãªããŸãïŒã ããã¯ãDaggerããã®äŸåé¢ä¿ã䜿çšããå¿
èŠãããå Žåããã®æ°ããã€ã³ã¹ã¿ã³ã¹ãæ¯åäœæããããšãæå³ããŸã ã


ãŸããã«ã¹ã¿ã Scopeã¢ãããŒã·ã§ã³ãäœæããããšãã§ããŸãïŒæ¬¡ã®èšäºã§è©³ãã説æããŸãïŒã
Scopeã¢ãããŒã·ã§ã³ã®ããã€ãã®æ©èœã¯æ¬¡ã®ãšããã§ãã
- éåžžãã¹ã³ãŒãã¢ãããŒã·ã§ã³ã¯ã³ã³ããŒãã³ãã«èšå®ãããã¡ãœãããæäŸããŸãã
- å°ãªããšã1ã€ã®æäŸã¡ãœããã«ã¹ã³ãŒã泚éãããå Žåãã³ã³ããŒãã³ãã¯ãŸã£ããåãã¹ã³ãŒã泚éãæã€å¿
èŠããããŸãã
- ã³ã³ããŒãã³ãã¯ããã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ã§ãã¹ãŠã®æäŸã¡ãœãããã察象ç¯å²å€ãã§ããå Žåã«ã®ã¿ãã察象ç¯å²å€ãã«ããããšãã§ããŸãã
- åãã³ã³ããŒãã³ãå
ã®ãã¹ãŠã®ã¹ã³ãŒã泚éïŒã€ãŸããã³ã³ããŒãã³ãã®äžéšã§ããæäŸã¡ãœãããæã€ãã¹ãŠã®ã¢ãžã¥ãŒã«ãšã³ã³ããŒãã³ãèªäœïŒ ã¯åãã§ãªããã°ãªããŸãã ã
Scope泚éä»ãã®ãããã¯ã«ã€ããŠã¯ã次ã®èšäºã§è©³ãã説æããŸãã ãããŠãåå¿è
ã«ãšã£ãŠã¯ãããã§ååã§ã:)
ãã®ããããã®èšäºã§ã¯ãIoCãDIãDagger 2ã®çè«çåŽé¢ã«ç²ŸéããŸãããã¹ã³ãŒãã¢ãããŒã·ã§ã³ãšãã®ç¹å®ã®å®è£
@Singleton
ã«éšåçã«ç²ŸéããDagger 2ã䜿çšããŠãäŸåé¢ä¿ã°ã©ãã®äœæã詳现ã«æ€èšã@Singleton
ã
èªãããšããå§ãããèšäºã®ãªã¹ããæäŸããŸãã
- å³æžé€šå
¬åŒããŒãž
- Googleãã¬ãŒã³ããŒã·ã§ã³
- ãã§ã«ãã³ãã»ã»ãã¹ã®èšäº
- ããã¹ã¯ãã»ã¹ã¿ãã¯ã«ããèšäº
- ã¢ã³ãããªã»ã¬ã€ãã«ããäžé£ã®èšäºã®æåã®éšå
- åè·¯å³ä»ãã®è¯ãèšäº
ã«ã¹ã¿ã ã¹ã³ãŒããã³ã³ããŒãã³ãã®äŸåé¢ä¿ãããã³ãµãã³ã³ããŒãã³ãã«é¢ãã2çªç®ã®èšäºã¯ãã§ã«åŸ
ã£ãŠããŸãïŒ
ã³ã¡ã³ããã¬ãã¥ãŒã質åãåŸ
ã£ãŠããŸãïŒ