2013-12-21 19 views
5

私は助けられた注射のメカニズムでかなり長い間google-guiceを使っています。私はスカラにいるので、scala-guiceを発見するだけで、私もそれを使うことに興味があります。しかし、私はどのように補助注入を使用するかについて混乱しています。補助注入を使用する例はありません。scala-guiceと助けられた注射

私の質問はここです:scala-guiceで補助注射を使用することは可能ですか?もしあれば誰でも簡単な例を提供できますか?

google-guiceの場合は、次のライブラリを使用します:javax.inject.jar、guice-3.0.jar、guice-assistedInject.jar。この場合、guice-3.0.jarを削除するだけですか?

答えて

12

Scalaでassisted injectを使用することは可能です。 Scalaの-Guiceのは、そのためのツールを提供していない場合は、あなただけの直接支援ジェクトAPIを使用することができます。

trait Entity { ... } 

class EntityImpl @Inject (
    @Assisted assistedDep: AssistedDependency, 
    normalDep: NormalDependency 
) extends Entity { ... } 

trait EntityFactory { 
    def create(assistedDep: AssistedDependency): Entity 
} 

class YourModule extends AbstractModule with ScalaModule { 
    def configure { 
    install(new FactoryModuleBuilder() 
     .implement(classOf[Entity], classOf[EntityImpl]) 
     .build(classOf[EntityFactory]) 
    ) 
    bind[NormalDependency].to[NormalDependencyImpl] 
    } 
} 

真を、それは非常にきれいではないですが、それは仕事が終わっ取得します。

また、guice-3.0.jarを絶対に削除しないでください。なぜあなたはそれを最初に考えましたか? javax.inject.jarにはJSR-330注釈が含まれ、guice-3.0.jarにはGuice自体が含まれ、guice-assistedinject-3.0.jarには補助注入拡張が含まれます。これらのすべての瓶は、補助注射のサポートでGuiceが必要な場合は重要です。

+0

ありがとうございました! – MaatDeamon

+0

@MaatDeamon、答えがヘルフルなら、それを受け入れるべきです。それがStackoverflowの仕組みです。 –

+0

注入されたクラスを工場支援クラスに変換する場合は、モジュールから旧バインディングを削除することを忘れないようにしてください。 – JMess

関連する問題