2016-04-18 7 views
2

私はcodingwell/scala-guiceを使用していて、他のコンポーネント/クラスのコンストラクタにDAOクラスを注入しようとしています。ScalaのGuice:DIコンストラクタ自体を持つクラスのモジュール

class DaoModule extends AbstractModule with ScalaModule { 
    override def configure() { 
    val dao1 = new FirstDaoImpl 
    bind(new TypeLiteral[FirstDaoTrait] {}).toInstance(dao1) 
    } 
} 

予想通り、それはコンストラクタ・インジェクションのために使用することができる結合作品:

は最初の試みで、私はそれが動作するかどうかを確認するために1 DAOクラスを使用していました。

2番目の手順では、もう1つのDAOクラスをモジュールに追加します。しかし、そのDAOクラスは、最初のDAOによって異なります

class SecondDaoImpl @Inject()(firstDao: FirstDaoTrait) extends SecondDaoTrait 

私は、既存のモジュールに必要な結合を追加するかどうかはわかりません。最初のステップを繰り返すこと、このことになる:

val dao2 = new SecondDaoImpl(???) 
bind(new TypeLiteral[SecondDaoTrait] {}).toInstance(dao2) 

しかし、もちろんこのクラスは唯一の最初のDAO(したがって、「???」)を提供することで、インスタンス化することができます。これどうやってするの?

答えて

2

使用bindとScalaの-Guiceのは、あなたのための依存関係を解決してみましょう:

class DaoModule extends AbstractModule with ScalaModule { 
    override def configure() { 
    bind[FirstDaoTrait].to[FirstDaoImpl] 
    bind[SecondDaoTrait].to[SecondDaoImpl] 
    } 
} 

そして今、注射器を使用して:作品

val injector = Guice.createInjector(new DaoModule()) 
val secondDao = injector.instance[SecondDaoTrait] 
+0

おかげで、。だから、インジェクタを使用する代わりにコンストラクタの注入を使用していますか?私はコンストラクタの注入を変更していないので、それはまだ動作しているようです。 – fxlae

+1

@JFoこれは、依存関係を解決する方法の1つで、最も簡単な方法です。 –

関連する問題