Slide 1

Slide 1 text

:VLJ4IJIP !TIJIPDIBO %FQFOEFODZ*OKFDUJPO
 JO,PUMJO DBLUJO

Slide 2

Slide 2 text

"CPVUNF 䘊歂⣇秀:6,*4)*)0 !TIJIPDIBO "OESPJE"QQ%FWFMPQFSBU$ZCFS"HFOU *OD !TIJIPDIBOEFTV 4IJCVZBBQL

Slide 3

Slide 3 text

4BNQMF$PEFT IUUQTHJUIVCDPNTIJIPDIBO ,PUMJO%*&YBNQMF

Slide 4

Slide 4 text

˖ %*XJUI%BHHFS ˖ %*XJUI,PEFJO ˖ $PODMVTJPO "HFOEB

Slide 5

Slide 5 text

%FQFOEFODZ*OKFDUJPO

Slide 6

Slide 6 text

$BTFXJUI%BHHFS

Slide 7

Slide 7 text

%*XJUI%BHHFS compile "com.google.dagger:dagger:2.11" compile "com.google.dagger:dagger-android:2.11" compile "com.google.dagger:dagger-android-support:2.11" kapt "com.google.dagger:dagger-compiler:2.11" kapt "com.google.dagger:dagger-android-processor:2.11" build.gradle ˖ VTF%BHHFSW ˖ Wד鷄⸇ׁ׸׋䭁䓸ٌآُ٦ٕ׾ⵃ欽

Slide 8

Slide 8 text

.PEVMFJO%BHHFS @Module class AppModule(private val app: Application) { @Provides @PerApp fun providesApp() = app } AppModule.kt ˖ !.PEVMF׾➰♷ ˖ *OKFDUׅ׷ًاحسח!1SPWJEFT׾➰♷

Slide 9

Slide 9 text

.PEVMFJO%BHHFS @Module abstract class ActivityBinderModule { @PerActivity @ContributesAndroidInjector abstract fun contributeTopActivityInjector(): TopActivity } ActivityBinderModule.kt ˖ "DUJWJUZפך*OKFDU ˖ !$POUSJCVUFT"OESPJE*OKFDUPS׾ⵃ欽

Slide 10

Slide 10 text

.PEVMFJO%BHHFS public final class DaggerAppComponent implements AppComponent { private Provider<~~~.TopActivitySubcomponent.Builder> topActivitySubcomponentBuilderProvider; private void initialize(final Builder builder) { this.topActivitySubcomponentBuilderProvider = new dagger.internal.Factory< ~~~.TopActivitySubcomponent.Builder>() { @Override public ~~~.TopActivitySubcomponent.Builder get() { return new TopActivitySubcomponentBuilder(); } }; //… } DaggerAppComponent.kt

Slide 11

Slide 11 text

$PNQPOFOUJO%BHHFS @Component( modules = arrayOf( AppModule::class, ActivityBinderModule::class, AndroidSupportInjectionModule::class) ) @PerApp interface AppComponent : AndroidInjector { //… } AppComponent.kt ˖ !$PNQPOFOU׾➰♷

Slide 12

Slide 12 text

$PNQPOFOUJO%BHHFS //… @PerApp interface AppComponent : AndroidInjector { @Component.Builder abstract class Builder :ɹ
 ɹɹɹɹɹɹɹAndroidInjector.Builder() { abstract fun appModule(module: AppModule): Builder } } AppComponent.kt ˖ !$PNQPOFOU#VJMEFS׾㹋鄲

Slide 13

Slide 13 text

"QQMJDBUJPOJO%BHHFS ˖ %BHHFS"QQMJDBUJPO׾竰䪫 ˖ ؝،؝ٝه٦طٝزך*OKFDUPSָ㹋鄲 ˖ )BT"DUJWJUZ*OKFDUPS ˖ )BT'SBHNFOU*OKFDUPS ˖ )BT4FSWJDF*OKFDUPS ˖ )BT#SPBEDBTU3FDFJWFS*OKFDUPS ˖ )BT$POUFOU1SPWJEFS*OKFDUPS ˖ ؙٓأせָずせזךד岣䠐 ˖ EBHHFSBOESPJE%BHHFS"QQMJDBUJPO ˖ EBHHFSBOESPJETVQQPSU%BHHFS"QQMJDBUJPO

Slide 14

Slide 14 text

"QQMJDBUJPOJO%BHHFS class MainApp : DaggerApplication() { //… override fun applicationInjector() : AndroidInjector { return DaggerAppComponent.builder() .appModule(AppModule(app)) .create(app) } } MainApp.kt ˖ BQQMJDBUJPO*OKFDUPS ׾0WFSSJEF

Slide 15

Slide 15 text

"DUJWJUZJO%BHHFS class TopActivity : DaggerAppCompatActivity() { @Inject lateinit var app: Application override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } //… } TopActivity.kt ˖ %BHHFS"QQ$PNQBU"DUJWJUZ׾竰䪫 ˖ "OESPJE*OKFDUJPOJOKFDU UIJT

Slide 16

Slide 16 text

يؤְ

Slide 17

Slide 17 text

$BTFXJUI,PEFJO

Slide 18

Slide 18 text

%*XJUI,PEFJO ˖ ,PUMJO%FQFOEFODZ*OKFDUJPO ˖ GFBUVSF ˖ -B[JMZJOTUBOUJBUFZPVSEFQFOEFODJFTXIFOOFFEFE ˖ 4UPQDBSJOHBCPVUEFQFOEFODZJOJUJBMJ[BUJPOPSEFS ˖ &BTJMZCJOEDMBTTFTPSJOUFSGBDFTUPUIFJSJOTUBODFPS QSPWJEFS ˖ &BTJMZEFCVHZPVSEFQFOEFODZCJOEJOHTBOE SFDVSTJPOT

Slide 19

Slide 19 text

%*XJUI,PEFJO ˖ ,PEFJOJTBHPPEDIPJDFCFDBVTF ˖ *UJTTNBMM GBTUBOEPQUJNJ[FE
 NBLFTFYUFOTJWFVTFPGJOMJOF ˖ *UQSPQPTFTBWFSZTJNQMFBOESFBEBCMFEFDMBSBUJWF %4- ˖ *UJTOPUTVCKFDUUPUZQFFSBTVSF BT+BWBJT ˖ *UJOUFHSBUFTOJDFMZXJUI"OESPJE ˖ *UQSPQPTFTBWFSZLPUMJOFTRVFJEJPNBUJD"1* ˖ *UDBOCFVTFEJOQMBJO+BWB

Slide 20

Slide 20 text

,PUMJO5FDIOJRVF JO,PEFJO

Slide 21

Slide 21 text

SFJFE // not use reified fun getName(clazz: Class<*>): String = clazz.simpleName
 
 val name = getName(Activity::class.java) // use reified inline fun getNameWithReified(): String = T::class.java.simpleName val name = getNameWithReified()

Slide 22

Slide 22 text

JOMJOF inline fun inlineFun(fun: () -> Unit) { fun() fun() fun() }
 inlineFun { print("hoge") }

Slide 24

Slide 24 text

%*XJUI,PEFJO compile "com.github.salomonbrys.kodein:kodein:4.0.0" compile "com.github.salomonbrys.kodein:kodein-android:4.0.0" build.gradle

Slide 25

Slide 25 text

.PEVMFJO,PEFJO fun appModule(app: Application) = Kodein.Module { bind() with instance(app) } AppModule.kt ˖ !.PEVMF,PEFJO.PEVMF ˖ !1SPWJEFCJOESFJFE5LPUMJO"OZ JOpY SFJpFE CJOE$MBTT QSPWJEF*OTUBODF

Slide 26

Slide 26 text

"QQMJDBUJPOJO,PEFJO class KodeinApp : Application(), KodeinAware { override val kodein: Kodein by Kodein.lazy { import(appModule(this@KodeinApp)) } } KodeinApp.kt ˖ ,PEFJO"XBSF׾㹋鄲

Slide 27

Slide 27 text

"DUJWJUZJO,PEFJO class TopActivity : KodeinAppCompatActivity() { private val app: Application by instance() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } //… } TopActivity.kt ˖ ,PEFJO"QQ$PNQBU"DUJWJUZ׾竰䪫

Slide 28

Slide 28 text

㼰׃ⴓַ׶װְׅ

Slide 29

Slide 29 text

5BHHFECJOEJOHT val kodein = Kodein { bind() with factory { sides: Int -> RandomDice(sides) } bind("DnD10") with provider { RandomDice(10) } bind("DnD20") with singleton { RandomDice(20) } }

Slide 30

Slide 30 text

4DPQFETJOHMFUPOT val kodein = Kodein { bind() with scopedSingleton(contextScope) { LogManager.getNamedLogger(it.localClassName) } } val logger: Logger = kodein.with(context).instance() // Same object as logger val sameLogger: Logger = kodein.with(context).instance() // different object than logger val otherLogger: Logger = kodein.with(otherContext).instance()

Slide 31

Slide 31 text

$PODMVTJPO

Slide 32

Slide 32 text

$PODMVTJPO ˖ %BHHFS ˖ ˖ ؝ٝػ؎ָٕ鸐׸ל⹛ֻ ˖ ِ٦ؠ٦ָ㢳ְ⹛⡲׾ֹ׍׿ה椚鍑דֹ׸ל㸜㹀 ׃ג⥂㸚〳腉 ˖ ˖ ؝٦س欰䧭ח״׶ًاحس侧ָ㟓ִ׷ ˖ 欰䧭ׁ׸׋؝٦سך〳铣䚍ָ䝤ְ ˖ ,BQU

Slide 33

Slide 33 text

$PODMVTJPO ˖ ,PEFJO ˖ ˖ JOKFDUׁ׸׋⣛㶷䚍׾WBMחדֹ׷ ˖ ؝٦س欰䧭ָזְךדًاحس侧ָ㟓ִזְ ˖ 〳铣䚍ָ넝ְ ˖ ˖ 㹋遤儗ؒٓ٦ָ饯ֿ׷ ˖ ِ٦ؠ٦ָ㼰זְ頾⫈חז׷〳腉䚍

Slide 34

Slide 34 text

$PODMVTJPO LBQUא׵ְ

Slide 35

Slide 35 text

:VLJ4IJIP !TIJIPDIBO 5IBOLZPV DBLUJO