éžã³æ¹
éžæãããã®ã®äžè¬çãªèŠä»¶ãããã€ã説æããŸãããããã«ãããäžå¿ èŠãªã³ãŒãçæãé²ãããšãã§ããŸãã
1.ã³ã³ãã€ã«æã§ã¯ãªããå®è¡æã®äŸåé¢ä¿ã®çæ
ãã®ãããžã§ã¯ãã§ã¯ãmultidexãã¯ããã«è¶ ããŠïŒãã§ã«3åïŒãçŸåšãããžã§ã¯ãã«ã¯4ã€ã®dexãã¡ã€ã«ããããŸãã ãããã®åœ¢æã«ãããäž»èŠãªåœ¹å²ã¯ãã³ã³ãã€ã«äžã®ã³ãŒãçæã«ãã£ãŠæããããŸãã
2.䜿ãããã
ç¶æ³ãæ³åããŠãã ããã äŸåæ§æ³šå ¥ã®ã¢ããªã±ãŒã·ã§ã³ã«åºã¥ããŠãã¢ãŒããã¯ãã£ããã°ãããããããå¿ èŠããããŸãã ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠäŸåé¢ä¿ãå®è£ ããããã«æ瀺ãããããŒã ããè€æ°ã®ãžã¥ãã¢ãéžæããŸããã æ°æéã®éã圌ãã¯ã¿ã¹ã¯ãæ£åžžã«å®äºãããããžã§ã¯ãã¯éå§ãããã©ã³ã¿ã€ã ã«èœã¡ãŸããã§ããã è¿ éãã€å¹ççã«ã誰ããéåžžã«å¹žãã§ãã
ãã¬ãŒã®çµéšã§ã¯ãæ°æéã§ã¯è¶³ããªããšèšãããŠããŸãã ãããŠæ°æ¥ã§ããã ãŸãã¯æ°ã¶æã 䜿ããããã¯é«éã«ã€ãªãããŸã-ãããŠã2000äžäººã®é¡§å®¢ã«äŸåé¢ä¿ãå®è£ ããããšã«ãªããšãæéã®åé¡ã¯ç¡èŠã§ããŸããã
3. Dagger 2ã®æ©èœä»¥äžã®æ©èœ
Dagger 2ã¯ãå€æ°ã®èå³æ·±ãå®è£ æ©èœãã¹ã³ãŒããããã³ãã®ä»ã®äŸåæ§æ³šå ¥æ©èœãæäŸããŸãã å¥ã®ãã¬ãŒã ã¯ãŒã¯ã«åãæ¿ãããšãã«ããã®ãã¹ãŠã倱ããããããŸããã
ãã®çµæãããã€ãã®ãã¬ãŒã ã¯ãŒã¯ã«æ±ºçããŸããã
- ãã§ã¶ãŒ
- ãããã³
- ã³ãã€ã³
- 茞è¡
- ã€ãŸããã
- ã¿ã€ã¬ãŒ
- ã©ã€ãã»ãŒããŒ
æåŸã®4ã€ã®ãªãã·ã§ã³ã¯ã³ãŒãçæã䜿çšãããããããã«ç Žæ£ããŸããã ç³é¹žã®åæéããå€æŽããçç± ãããã£ãŠããã¥ãŒã¯ããã§ã¶ãŒããããã³ãã³ãã€ã³ã«èœã¡ãŸããã ãã ããæåã®2ã€ã¯é·ãéãµããŒããããŠããããKodeinã¯é »ç¹ã«ãªãªãŒã¹ãããŸãã æåŸã«ãç§ãã¡ã¯ããã«ãšã©ãŸãããšã«ããŸããã
DIãŸãã¯SLïŒ
å°ãåæ çãªäœè«ã RedditãšAndroidã¢ãŒããã¯ãã®éã§ã¯ããã®ãã¬ãŒã ã¯ãŒã¯ãäŸåæ§æ³šå ¥ãã¿ãŒã³ã®å®è£ ãªã®ãããããšããµãŒãã¹ãã±ãŒã¿ãŒã®å®è£ ãªã®ãã«ã€ããŠè°è«ããããŸãã ãµãŒãã¹ãã±ãŒã¿ãŒã®æ¯æè ã®è°è«ïŒãžã§ã€ã¯ã»ãŠã©ãŒãã³èªèº«ãèšã£ãããã«ã圌ã¯ãããããŸãæ£åœåããŸããã ããããããã§ãããã¬ãŒã ã¯ãŒã¯éçºè èªèº«ã¯èªåãDIãšããŠäœçœ®ã¥ããŠããŸãã ããŒã å ã§ã¯ããã®ãããã¯ã«ã€ããŠãè°è«ããŸããããäžè¬çãªæèŠã«ã¯è³ããŸããã§ããã Salomon BrysïŒãã¬ãŒã ã¯ãŒã¯éçºè ïŒã«é£çµ¡ããŸããã ç§ã¯çããåŒçšããŸãïŒ
ãæ£ç¢ºã«ã¯ãDIãšSLã©ã€ãã©ãªã«ã¯å€ãã®éãããããŸãã
-DIã©ã€ãã©ãªã¯ãäžæçãªäŸåé¢ä¿ãšåæåã®é åºãç解ããå¿ èŠããããŸã
-DIã©ã€ãã©ãªã¯ã¹ã³ãŒãïŒã·ã³ã°ã«ãã³ããããã€ããŒãªã©ïŒãæäŸããå¿ èŠããããŸã
Kodeinã¯ç¢ºãã«DIã©ã€ãã©ãªã§ããã
ãã¬ãŒã ã¯ãŒã¯ã®äœæè ã®ç«å Žã«åºã¥ããŠãKodeinã¯ãDIãã¿ãŒã³ã®èŠä»¶ãããæºããããããµãŒãã¹ãã±ãŒã¿ãŒã§ã¯ãããŸããã å人çã«ã¯ãããã¯çšèªã®åé¡ã§ãããããŒã«ã®æ©èœã§ã¯ãªããšæããŸãã ã©ã€ãã©ãªãããŒãºãæºãããŠããã°ããããå®è£ ãããã¿ãŒã³ã®ååãäœã§ãããã¯é¢ä¿ãããŸããã äž»ãªããšã¯ãäœæ¥ãåé¡ãªãè¡ãããããšã§ãã
å®è£ ãšæ¬ ç¹
ãããžã§ã¯ããã¢ãžã¥ã©ãŒã¢ãŒããã¯ãã£ã«ç§»è¡ãå§ãããšãã«ãKodeinãžã®ç§»è¡ãå¯èœã«ãªããŸãããã€ãŸãããã¹ãŠã®è£œåãäºãã«ç¬ç«ããå¥åã®ã¢ãžã¥ãŒã«ã«è¡šç€ºããŸãã ããã«ããæãèªç±ã«ãªãã1ã€ã®å°ããªDagger 2ã¢ãžã¥ãŒã«ã§Kodeinã眮ãæããããšãã§ããŸããã ã©ã¡ãããšããã°ãã¢ãžã¥ãŒã«ã®ä»¥åã®å®å®ããŒãžã§ã³ã«ããŒã«ããã¯ããŠäœæ¥ããããšãã§ããŸãã
æåã¯ãKotlinã§èšè¿°ããããã®ãããªãã¯ãã䜿çšããŠãããããKodeinãJavaãããžã§ã¯ãã§æ£ããåäœããªãããšãå°ãæããŠããŸããã ããããKodeinã¯åªããJavaã³ãŒãããµããŒãããŠãããããã«äŸåé¢ä¿ãæ³šå ¥ããã®ã¯ãDagger 2ã䜿çšããã®ãšåããããç°¡åã§ããããšãããããŸããïŒããã«ç°¡åã§ã-以äžã§è©³ãã説æããŸãïŒã
Dagger 2ããKodeinãžã®ç§»è¡ã¯ãã¢ãžã¥ãŒã«ã®ãµã€ãºãéåžžã«å°ãããDIãããŸãç©æ¥µçã«äœ¿çšãããªãã£ããããèŠçã¯ãããŸããã§ããã ããã»ã¹ã¯ååã«ã¹ã ãŒãºã«é²ã¿ããã¹ãŠã¯ããŒãããã¯ããå§ãŸããäŸåé¢ä¿ã¯æå³ãããšããã«å®è£ ãããããã«ãªããŸããã ãã¡ãããKaggerã§æžããããããžã§ã¯ãã«Kodeinãå®è£ ããæ¹ãè¯ãã®ã§ãããå®éšããŠããã®ã§ãäºæ³å€ã®åŽé¢ããã©ã€ãã©ãªãèŠãå¿ èŠããããŸããã
ããã¯ãã¹ãŠãGoogleã®èŠæš©ãçµããããDaggerããæé«ã®DIãã¬ãŒã ã¯ãŒã¯ã®ã¿ã€ãã«ãç²åŸããå®ç§ãªéã®åŒŸäžžã®ããã«èŠããŸãã ããããKodeinã¯éçšäžã«éåžžã«é倧ãªæ¬ ç¹ãçºèŠããŸããã
- æãéèŠã§å€§ããªãã€ãã¹ç¹ã¯ããšã©ãŒã®åå ãç解ããã«ã©ã³ã¿ã€ã ã§ãšã©ãŒãååŸã§ããããšã§ãã ããã¯ãDagger 2ãé€å»ããæåã®Daggerã®åé¡ã§ãããã³ã³ãã€ã«äžã«ã³ãŒãçæã«åãæ¿ããŸããã ã³ãã€ã³ã§ãåãããšãããããŸãã ãã®åé¡ã¯ã培åºçãªãã¹ããšèªåãã¹ãã§ã®æ©èœã«ãã¬ããžã«ãã£ãŠè§£æ±ºãããŸãã ããã«ããã¬ãŒã ã¯ãŒã¯èªäœã¯ããã¹ãã®äœææã«ãã®æ©èœã䜿çšããããšãæšå¥šããŠããŸãã
- å€ã倧èŠæš¡ãªJavaãããžã§ã¯ãããããKotlinãæ¥ç¶ããæ¹æ³ããªãå ŽåãKodeinã¯é©åã§ã¯ãããŸããã ããããããã¯é·å¹Žã®éºç£ã®äžã§ç§ãã¡ã®å·šå€§ãªãããžã§ã¯ãã®ç
æ°ã§ãã
- å®éã®ãããžã§ã¯ãã§ã¯äººæ°ãäœãã ããã¯ãéçºè
ã®ãã£ãŒãããã¯ãå°ãªããªããžããªãžã®è²¢ç®è
ãå°ãªãããããããžã§ã¯ãã®éçºãåãDaggerãããã¯ããã«é
ããšããäºå®ã«ã€ãªãããŸãã ç§ãã¡ãçºèŠããæ¬ ç¹ã«ä»ãèŠããã§ããã®ã§ãã³ãã€ã³ãçç£ã«æã¡èŸŒãããšã¯äºå®ã§ã¯ãããŸããã
æ¥ç¶æ¹æ³
ãã¬ãŒã ã¯ãŒã¯ããããžã§ã¯ãã«æ¥ç¶ããã®ã«ããã»ã©æéã¯ããããŸãããgradleãã¡ã€ã«ã§äŸåé¢ä¿ãæå®ããã ãã§ãïŒ
implementation 'com.github.salomonbrys.kodein:kodein:4.1.0'
Kotlinã§ã®ãªã³ã¯ïŒ
äŸåé¢ä¿ã宣èšãããKodeinãªããžã§ã¯ãã宣èšããŸãã
val kodein = Kodein { bind<Message>() with provider { MessageFactory(0, 5) } bind<DbProvider>() with singleton { SqliteDS.open("path/to/file") } }
ããã«ã€ããŠããã«èª¬æããŸããbindã¡ãœããã¯ãããã§ã¯ã¯ã©ã¹ãã€ã³ã©ã€ã³é¢æ°ã䜿çšããŠãã€ã³ããããããšã瀺ããŠããŸãã ãžã§ããªãã¯ã§ã¯ãå®è£ ãæ³šå ¥ããã€ã³ã¿ãŒãã§ã€ã¹ã瀺ããŸãã ãã€ã³ãã£ã³ã°ã®æ¹æ³ã説æããwithã¡ãœãããæ¥ãåŸãKodeinã«ã¯ãããã®ããã€ãããããŸããããããã«ã€ããŠã¯å°ãåŸã§èª¬æããŸãããã®å Žåã¯ãããã€ããŒãšã·ã³ã°ã«ãã³ã§ãã ãã®åŸãäžæ¬åŒ§ã§ãæ³šå ¥ããã¯ã©ã¹ã®ç®çã®ã€ã³ã¹ã¿ã³ã¹ã眮ãæããŸãã
ãã€ã³ãã£ã³ã°èªäœã¯æ¬¡ã®ããã«ãªããŸãã
class Controller(private val kodein: Kodein) { private val ds: DataSource = kodein.instance() }
ååãšããŠãè€éãªããšã¯äœããããŸããã詳现ãç¥ããªããŠãããã®ãã¬ãŒã ã¯ãŒã¯ã§ããã«äœæ¥ãéå§ã§ããŸãã
ãã€ã³ãã£ã³ã°ã®çš®é¡
Kodeinã§ã¯ãããã€ãã®æ¹æ³ã§äŸåé¢ä¿ãæ³šå ¥ã§ããŸãã
- ãã¡ã¯ããªãã€ã³ãã£ã³ã°ã¯ããã¡ã¯ããªããå¿
èŠãªã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ãååŸããããã«åŒæ°ãå¿
èŠãšãããã€ã³ãã£ã³ã°ã§ãã ã€ã³ã¹ã¿ã³ã¹ã¯ãç®çã®ã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ãèŠæ±ããããã³ã«çæãããŸãã
val kodein = Kodein { bind<Message>() with factory { type: Int -> MessageFactory(type) } }
- ãããã€ããŒãã€ã³ãã£ã³ã°-ãã®ãã€ã³ãã£ã³ã°ã¯ãã¹ãã¬ãŒãžããå¿
èŠãªã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãããã¡ã¯ããªãã€ã³ãã£ã³ã°ãšã¯ç°ãªãã泚å
¥ã®åŒæ°ã¯å¿
èŠãããŸããã ãªã¯ãšã¹ãã«å¿ããŠæ¯åçæãè¡ãããŸãã
val kodein = Kodein { bind<Message> with provider { MessageFactory(6) } }
- ã·ã³ã°ã«ãã³ãã€ã³ãã£ã³ã°-ããã§ã¯ãã¹ãŠãç°¡åã§ããé
延åæåã䜿çšããŠã·ã³ã°ã«ãã³ãäœæããŸãã ã·ã³ã°ã«ãã³ã®äœæã¯äžåºŠã ãåŒã³åºãããŸãã
val kodein = Kodein { bind<DBProvider>() with singleton { SqliteDS.open("path/to/file") } }
- ã¿ã°ä»ããã€ã³ãã£ã³ã°-ç°ãªãã€ã³ã¹ã¿ã³ã¹ãçæãããã¿ã€ãã®ã¿ã°ä»ããèš±å¯ããŸãã
val kodein = Kodein { bind<Message>() with factory { type: Int -> MessageFactory(type) } bind<Message>("ImageMessage") with provider { MessageFactory(10) } bind<Message>("PaymentMessage") with singleton { MessageFactory(20) } }
æ©èœããããŸãïŒ
- é
延åæåãªãã§ã·ã³ã°ã«ãã³ãäœæããŸãã Kodeinãªããžã§ã¯ããåæåããããšããªããžã§ã¯ããçæãããŸãã
- ã€ã³ã¹ã¿ã³ã¹ãåä¿¡ããŸãïŒäœæãããå Žåã®ã¿ïŒã
- ã·ã³ã°ã«ãã³ãšãã¡ã¯ããªãã€ã³ãã£ã³ã°ã®æ··åããŒãžã§ã³ã®äœæ-åŒæ°ãæã€ã€ã³ã¹ã¿ã³ã¹ãååŸããæ¯åæ°ããã€ã³ã¹ã¿ã³ã¹ãäœæããããªãå Žåã
ãã1ã€ã®äŸ¿å©ãªæ©èœã¯ããã³ãã«ã匱ããªã³ã¯ãšãœãããªã³ã¯ã§ã©ããããããšã§ãã ããã¯ããªããžã§ã¯ããé·åœã§ãã£ãŠã¯ãªããªãããšãç解ããŠããå Žåã«æå©ã§ãã
èå³æ·±ãæ©äŒã¯ãããŒã«ã«ã¹ããªãŒã ããã€ã³ãããããšã§ãã ã€ãŸããåã¹ã¬ããã«ã¯ãå¿ èŠãªã€ã³ãžã§ã¯ã·ã§ã³ã®ç¬èªã®ã€ã³ã¹ã¿ã³ã¹ããããŸãã
ã¢ãžã¥ãŒã«ã®äœæ
Kodeinã§ã¯ãDagger 2ãšã»ãŒåãæ¹æ³ã§ãã€ã³ãã£ã³ã°ãã¢ãžã¥ãŒã«ã«ä¿åã§ããŸããäŸïŒ
val apiModule = Kodein.Module { bind<MessengerApi>() with singleton { DefaultMessengerApi() } }
ãããŠãKodeinãªããžã§ã¯ããåæåãããšãã«ãç®çã®ã¢ãžã¥ãŒã«ãæå®ã§ããŸãã
val kodein = Kodein { import(apiModule) }
ãã€ã³ãã®ãªãŒããŒã©ã€ã
ããã©ã«ãã§ã¯ãå¶ç¶ã®ãäºéããã€ã³ãã£ã³ã°ãäºæãã¬çµæã«ã€ãªãããåé¡ãèŠã€ããã®ã«æéã浪費ããå¯èœæ§ããããããKodeinã¯ãã€ã³ãã£ã³ã°ã®ãªãŒããŒã©ã€ããçŠæ¢ããŠããŸãã ãããããã®ãããªæ©äŒã¯ååšããŸãã ããã¯ãããšãã°ãå®è£ ãããçš®ã®ã¢ãã¯ã«å€æŽã§ããã¯ã©ã¹ããã¹ãããå Žåã«äŸ¿å©ã§ãã ããã¯æ¬¡ã®ããã«è¡ãããŸãã
val kodein = Kodein { bind<MessengerApi>() with singleton { DefaultMessengerApi() } /* ... */ bind<MessengerApi>(overrides = true) with singleton { CustomMessengerApi() } }
æ³šå ¥ãããåã®ã€ã³ã¹ã¿ã³ã¹ãæ¢ã«ãããã©ããããããªãããšãæ³åããŠãã ããã ãã®ãããªå Žåã«ã¯ããã®ãããªã€ã³ã¹ã¿ã³ã¹ãååšããå Žåã«ããããªãŒããŒããŒãã§ããèšèšããããŸãã
val kodein = Kodein { /* ... */ import(testEnvModule, allowOverride = true) }
æ¢ã«ãªãŒããŒã©ã€ããããã€ã³ã¹ã¿ã³ã¹ãååŸããããšãæãŸããããšã瀺ããã©ã°ããããŸãã ãæ°ãããã€ã³ã¹ã¿ã³ã¹ã«ãæ¹åããããæ©èœãããå ŽåïŒ
val testModule = Kodein.Module(allowSilentOverride = true) { bind<EmailClient>() with singleton { MockEmailClient() } }
é 延åæå
Kotlinããã®ããããã£ã®å§ä»»ã®ãããã§ãKodeinã§ã¯ãã»ãŒãã¹ãŠã®ã¿ã€ãã®ãã€ã³ãã£ã³ã°ã«å¯ŸããŠããã€ã³ãã£ã³ã°ã®é 延åæåã䜿çšã§ããŸãã
class Controller(private val kodein: Kodein) { private val messageFactory: (Int) -> Dice by kodein.lazy.factory() private val dbProvider: DataSource by kodein.lazy.instance() private val randomProvider: () -> Random by kodein.lazy.provider() private val answerConstant: String by kodein.lazy.instance("answer") }
ã©ã³ã¿ã€ã ã§ã®ã¯ã©ã¹ã®çææ¹æ³
ã¯ã©ã¹ã¯é¢æ°ãåã蟌ãããšã§çæãããŸãã ããã«ãããã³ã³ãã€ã«æã«ã³ãŒãã«ã€ã³ãžã§ã¯ã·ã§ã³ãåã蟌ãããšãã§ããŸãã ã€ãŸããã³ã³ãã€ã©ã¯ãçµã¿èŸŒã¿é¢æ°ã宣èšãããå Žæã«å¿ èŠãªã³ãŒãã®äžéšãæ¿å ¥ããã ãã§ãã ã³ãã€ã³ã§ã®ã¯ã©ã¹çæã¯åãåçã§è¡ãããŸãã ã€ã³ã¹ã¿ã³ã¹ã®äœæã«å¿ èŠãªã¿ã€ãã®éžæã¯ãå ·äœåããããžã§ããªãã¯ã«ãããã®ã§ãã 詳现ã«ã€ããŠã¯ãèšäºã®æåŸã«ãããªã³ã¯ãã芧ãã ããã
Javaãããžã§ã¯ãã®Kodein
ãããããããžã§ã¯ããKotlinã§ã¯ãªãJavaã§æžãããŠããå Žåã¯ã©ãã§ããããïŒ Kodeinã¯ãå€ãè¯ãJavaã§ãåãæ©èœãæäŸããŸãããããã€ãã®å¶éããããŸãã ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãJSR-330ä»æ§ãç¹ã«Javaã§DIã«å°ãªããšãäžåºŠééããããšããã人ãªã誰ã§ãç¥ã£ãŠããInjectã¢ãããŒã·ã§ã³ãéšåçã«ãµããŒãããŸãã
ããã«ã¯ããã€ãã®æ¬ ç¹ããããŸãã ã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã€ã³ã©ã€ã³é¢æ°ãšãžã§ããªãã¯ã§ã¯ãªãããªãã¬ã¯ã·ã§ã³ã®å©ããåããŠè¡ãããŸãã ãããã£ãŠããªãã¬ã¯ã·ã§ã³ãšå€èšèªã³ã³ãã€ã«ã«ããããã©ãŒãã³ã¹ãäœäžããŸãã ããã«ããã€ã³ããŒãå«ããªããžã§ã¯ãã¯Kotlinã§äœæããå¿ èŠããããŸããæ¡ä»¶ãJavaã®ã¿ã®äœ¿çšã瀺ããŠããå Žåãæ²ããããªãKodeinã¯ããªãã«ã¯é©ããŠããŸããã
Javaãããžã§ã¯ãã§Kodeinã䜿çšããã«ã¯ãããã€ãã®æé ãå®è¡ããå¿ èŠããããŸãã
- JxInjectorãgradleã«æ¥ç¶ããŸãã
compile 'com.github.salomonbrys.kodein:kodein-jxinject:4.1.0'
2. jxIntectorã¢ãžã¥ãŒã«ãKodeinãªããžã§ã¯ãã«è¿œå ããŸãã
val kodein = Kodein { import(jxInjectorModule) /* Other bindings */
3.ãã€ã³ãããŸãã ããã«ã¯2ã€ã®æ¹æ³ããããŸãã æåã®æ¹æ³ã¯å€å žçãªæ¹æ³ã§ãã å¿ èŠãªãã£ãŒã«ãã«æ³šéã®æ¿å ¥ãèšè¿°ããã¡ãœãããèšè¿°ããã ãã§ãããã¹ãŠãDaggerã®å Žåãšåãããã«æ©èœããŸãã
public class MyJavaController { @Inject public MyJavaController(Connection connection, FileSystem fs) { /* ... */ } /* ... */ }
2çªç®ã®æ¹æ³ã¯ãç¹å®ã®Kodeinãªããžã§ã¯ãã䜿çšããããšã§ãã
MyJavaController controller = Jx.of(kodein).newInstance(MyJavaController.class);
ãŸãã¯ïŒ
MyJavaController controller = new MyJavaController(); Jx.of(kodein).inject(controller);
ãããã«
å€æ¹ã«æåéãåºæ¬ãç解ããããããããžã§ã¯ãã«å®è£ ããããã«Kotlinã§èšè¿°ããŠå®çšŒåã§ãã¹ãããããšãå¯èœã«ãããã·ã³ãã«ã§è»œéãªDIãã¬ãŒã ã¯ãŒã¯ã§ããïŒ è¯ãããã«èãããŸãããã³ãã€ã³ã§ã¯ãããçå®ã«ãªããŸããã
ãã®ãã¬ãŒã ã¯ãŒã¯ã¯Dagger 2ã®100ïŒ ã®ä»£æ¿ç©ã§ã¯ãããŸããããããããŒæ°ã§ãã察åŠã§ãããè¿œå ã®ã³ãŒãçæã«ããæ°ããdexãã¡ã€ã«ãçæãããå¯èœæ§ã®ããã³ãŒãã®å€§èãªãããžã§ã¯ãã§äœ¿çšã§ããŸãã ããããå°ããªãããžã§ã¯ãã§ã¯ã³ãã€ã³ãæªããšã¯æããªãã§ãã ããã Dagger 2ã«åºæã®ã¡ã«ããºã ã«é¢ããç¥èãå¿ èŠãšããã«ãäŸåé¢ä¿ã®æ³šå ¥ãå€§å¹ ã«ç°¡çŽ åããŸãã
Kodeinã¯ãŸããKotlinã«éåžžã«é©ããŠããŠããã®ãããªãããžã§ã¯ãã§ã¯ããªãè¯ãæ°åã§ãã ããã§ãå°ãªããšããã¯ã©ã¹ã®ã³ãŒãçæã¯éåžžã«èå³æ·±ãã§ããããã¯ãã³ãã£ã«ã³ãæäŸãããããã®æ©äŒãæ¯æããåå°ã䌎ãã¢ãããŒãããã®éžè±ã§ãã æ®å¿µãªããããã®å®éšã®äžéšãšããŠæžããããã¹ãŠã®ã³ãŒãããŸã çç£ããŠããŸããããã¬ãŒã ã¯ãŒã¯ãç§ãã¡ã®è¶³å ãæããªããšãã100ïŒ ã®ç¢ºå®æ§ããªãããã§ãã ç 究ã¯é²è¡äžã§ãã
䟿å©ãªãªã³ã¯
- Kodein Founding Father Repository
- Kotlinèšèªã®ã€ã³ã©ã€ã³é¢æ°ã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ããã
- ããããã£ã®å§ä»»ã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ããã