Skip to content

Instantly share code, notes, and snippets.

@Hunachi
Last active March 10, 2018 16:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hunachi/aa74dc115e2e818683ea238fcd6b32cb to your computer and use it in GitHub Desktop.
Save Hunachi/aa74dc115e2e818683ea238fcd6b32cb to your computer and use it in GitHub Desktop.
Kodeinから始めるDI [1] ( for Android ) ref: https://qiita.com/Hunachi/items/4ab0de34ff9fad6b4481
val kodein = Kodein{
constant("koya") with 10
constant("shujin") with "Hunachi marunosuke"
}
val kodein = Kodein{
bind<Egg> with eagerSingleton{Niwatori().born()}
}
val kodein = Kodein{
bind<Hiyoko> with factory{parent: Niwatori -> Hiyoko(parent)}
}
bind<Hiyoko> with multiton{hoge: Int -> (hoge, instance(), instance("koyo"))}
val kodein = Kodein{
bind<Hina> with instance(EggAdapter.bone())
}
val kodein = Kodein{
bind<Hiyoko> with factory{parentName: String-> Hiyoko(parent)}
}
//ここの書き方については後述,
val hiyoko: Hiyoko = with("Niwatori").kodein.instance()
val hakutyou: Hiyoko = with("Hakutyo").kodein.instance()
val hiyoko2: Hiyoko = with("Niwatori").kodein.instance()
//hiyokoとhiyoko2は同じインスタンス.hakutyouは別のインスタンス.
val kodein = Kodein{
bind<Niwatori> with provider{Niwatori()}
}
val kodein = Kodein{
//softReference
bind<Niwatori> with refSingleton(softReference){Niwatori()}
//threadLocal
bind<Hiyoko> with refSingleton(threadLocal){Hiyoko()}
}
val kodein = Kodein{
//scopedSingletonの例のみ
bind<Torinuku> with scopedSingleton(androidContextScope){Toriniku(it as Niwatori)}
}
val kodein = Kodein{
bind<Farm> with singleton{Farm()}
}
val kodein = Kodein{
//呼び出す時にTagを"Hokkaido"に指定すると,上の分でbindされたインスタンスが返ってくる.
bind<Hiyoko>("Hokkaido") with provider{Hiyoko("samui")}
bind<Hiyoko>("Kagoshima") with provider{Hiyoko()}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment