PrivateModule
PrivateModuleã使ãã¨ãã¢ã¸ã¥ã¼ã«ã«ç»é²ãããã³ã³ãã¼ãã³ãã®å ¬é/éå ¬éãå¶å¾¡ã§ãã¾ãã
- ããã©ã«ãã¯éå
¬éã
- ã³ã³ãã¼ãã³ãã¯ãç»é²ãããã¢ã¸ã¥ã¼ã«å ã§ã®ã¿å©ç¨å¯è½(ä»ã®ã³ã³ãã¼ãã³ãã«Injectå¯è½)ã§ãã
- å¤é¨ããåå¾ãããã¨ããã¨ã¨ã©ã¼ã«ãªãã¾ãã
- å ¬éããã«ã¯æ示çã«exposeãã¾ãã
Injector injector = Guice.createInjector( new PrivateModule(){ // âPrivateModuleãæ´¾ç protected void configure() { // ã³ã³ãã¼ãã³ããç»é² // â ç»é²ããã ãã§ã¯éå ¬éã§å¤é¨ããåç §ã§ããªãã binder().bind( String.class ).toInstance( "mii" ); binder().bind( Integer.class ).toInstance( 100 ); // å ¬éããã«ã¯ãæ示çã«exposeããã expose( Integer.class ); } }); // exposeãããã³ã³ãã¼ãã³ãã¯åå¾å¯è½ System.out.println( injector.getInstance( Integer.class ) ); // ããã§ãªããã®ã¯ãåå¾ã§ããã¨ã©ã¼ã«ãªãã try { System.out.println( injector.getInstance( String.class ) ); } catch ( Exception e ) { e.printStackTrace(); }
å®è¡çµæã§ãã
100 com.google.inject.ConfigurationException: Guice configuration errors: 1) A binding to java.lang.String already exists on a child injector. while locating java.lang.String 1 error at com.google.inject.InjectorImpl.getProvider(InjectorImpl.java:784) at com.google.inject.InjectorImpl.getProvider(InjectorImpl.java:743) at com.google.inject.InjectorImpl.getInstance(InjectorImpl.java:793) at guice.PrivateModuleSmple.main(PrivateModuleSmple.java:43)
éå
¬éã®ã³ã³ãã¼ãã³ãã¯å¤é¨ã«å
¬éãããªãã®ã§ãä»ã®ã¢ã¸ã¥ã¼ã«ã¨è¨å®ã競åãã¦ãã¦ãã¨ã©ã¼ã«ãªãã¾ããã
Injector injector = Guice.createInjector( new PrivateModule(){ protected void configure() { binder().bind( String.class ).toInstance( "foo" ); // ã¢ã¸ã¥ã¼ã«å ã®ä»ã®ã³ã³ãã¼ãã³ãã§ã¯ä½¿ç¨ã§ãã binder().bind( Foo.class ); expose( Foo.class ); } }, new PrivateModule(){ protected void configure() { // ã¹ã³ã¼ããéãã®ã§ä»ã®ã¢ã¸ã¥ã¼ã«ã®å®ç¾©ã¨ç«¶åããªãã // åããã¨ãAbstractModuleã§ããã¨ã¨ã©ã¼ binder().bind( String.class ).toInstance( "var" ); binder().bind( Var.class ); expose( Var.class ); } }); System.out.println( injector.getInstance( Foo.class ).str ); System.out.println( injector.getInstance( Var.class ).str );
å®è¡çµæã§ãã
foo var