まず、依存関係をインスタンス化してから、モジュールconfig
の方法でバインドすることはできますか?Scala Guice - mixinを挿入
class PersonServiceImpl @Inject()(addressService: AddressService) {
...
}
class AppModule extends AbstractModule with ScalaModule {
def configure() {
bind[PersonService].to[PersonServiceImpl]
bind[AddressBook].to[AddressBookImpl]
}
@Provides @Singleton
def provideAddressService(addressBook: AddressBook): AddressService = {
new AddressServiceImpl(addressBook) with SecureAddressView
}
}
...正常に動作します:
現在、私は、次の設定があります。私が今したいのは、AddressServiceImpl
のインスタンス化を別のモジュールに移すことです。これが失敗した
class AddressModule extends AbstractModule with ScalaModule {
def configure() {
bind[AddressService].to[AddressServiceImpl]
}
@Provides @Singleton
def provideAddressService(addressBook: AddressBook): AddressService = {
new AddressServiceImpl(addressBook) with SecureAddressView
}
}
:だから、問題は、私は私のためaddressBook
パラメータを注入するGuiceのが必要ですが、私はまた、インスタンスを作成したいAddressServiceImpl
のインスタンスを作成するために、自分自身がそう私はSecureAddressViewを混在させることができるということですしかし、GuiceがprovideAddressService
メソッドについて不満を返すにつれて、基本的にはA binding to AddressService was already configured
と書いてあり、bind[AddressService].to[AddressServiceImpl]
行を指しているのはconfigure
の方法です。
Guiceにダウンストリームパラメータの依存関係の解決を依頼しながら、特性のインスタンスとミックスを作成する方法はありますか?
Guiceは、同じインタフェースを作成するための2つのメソッドの定義を許可しません。私はScalaの開発者ではないので、これを答えとして書くつもりはありませんが、必要なのは[バインディングアノテーション](https://github.com/google/guice/wiki/BindingAnnotations)です。 SecureAddressViewを使用してAddressServiceに '@Named(" secure ")を使用し、' @ Named'を指定しない場合はconfigureメソッドのバインディングを使用させます。 '@Named(" secure ")'が気に入らなければ、あなた自身の '@ SecureAddress'アノテーションを作成して代わりに使うこともできます。 –