Kotlinç¨DIãã¬ã¼ã ã¯ã¼ã¯ãã¤ãã£ã¦ã¿ã
ã¤ãã£ã¦ã¿ã¾ããã
ãã®åãInjeKTorã
ãã®ååããªãæ°ã«å ¥ã£ã¦ã¾ãã
å ¨ã³ã¼ãã¯ãã¡ãâhttps://github.com/ntaro/InjeKTor
以åæ¸ããã¨ã³ããªã§Kotlinã®å§è²ã®ããã®æ©è½ãç´¹ä»ãã¾ããã
ãããæ´»ããããã«ã³ã³ã¹ãã©ã¯ã¿ã»ã¤ã³ã¸ã§ã¯ã·ã§ã³ãè¡ãã¾ãã
ä¾ãã°ãããªæãã®ã¤ã³ã¿ãã§ã¼ã¹ã¨å®è£ ã¯ã©ã¹ããã£ãã¨ãã¾ãã
trait Foo class FooImpl: Foo trait Bar class BarImpl(foo: Foo): Bar, Foo by foo class Baz(bar: Bar): Bar by bar
Baz
ã使ãããã£ããé常ã¯ãããã¾ãã
val baz = Baz(BarImpl(FooImpl()))
InjeKTorã使ãã¨æ¬¡ã®ããã«æ¸ãã¾ãã
val injector = createInjector { javaClass<Foo>() to javaClass<FooImpl>() javaClass<Bar>() to javaClass<BarImpl>() } val baz = injector.getInstance(javaClass<Baz>())
createInjector
é¢æ°ã§Injector
ã¤ã³ã¹ã¿ã³ã¹ãçæãã¦ãã¾ããå¼æ°ã«é¢æ°ãªãã¸ã§ã¯ããåã£ã¦ãããã§ã¤ã³ã¿ãã§ã¼ã¹ã¨å®è£
ã¯ã©ã¹ã®å¯¾å¿é¢ä¿ãè¨å®ãã¦ãã¾ããInjector#getInstance
ã§ä¾åæ§ã注å
¥ãããBaz
ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãçæãã¦è¿ãã¦ãã¾ãã
ããããã£ã¸ã®ã¤ã³ã¸ã§ã¯ã·ã§ã³ãã§ãã¾ãã
class Hoge class Fuga { private val hoge by LazyInjector(javaClass<Hoge>()) }
Kotlinã®Delegated Propertyã¨ããæ©è½ã使ã£ã¦å®ç¾ãã¦ãã¾ãã
Kotlinã§Guiceã使ã
KotlinããGuiceã使ãã¾ãâKotlin + Guiceãã£ã¦ã¿ã
Guice使ã£ã¦æåã®ä¾ã¨åãã®ãæ¸ãã¨ãããªãã¾ãã
trait Foo class FooImpl : Foo trait Bar class BarImpl [Inject](foo: Foo) : Bar, Foo by foo class Baz [Inject](bar: Bar) : Bar by bar fun main(args: Array<String>) { val injector = Guice.createInjector(object: AbstractModule() { override fun configure() { bind(javaClass<Foo>()).to(javaClass<FooImpl>()) bind(javaClass<Bar>()).to(javaClass<BarImpl>()) } }) val baz = injector.getInstance(javaClass<Baz>()) }
ã ãããInjeKTorã¨åãã§ãããã
InjeKTorãèªåã§ããããå¦çæ¸ããªãã§Guiceã©ããã«è·¯ç·å¤æ´ãããããª...