1

同じインターフェイスと複数のサブモジュールへの異なるバインディングを持つ 2 つの異なるモジュールがあります。以下の例

public PublisherModule { 
     public void configure() {
         bind(ITransport.class).to(TCPTransport.class)
         install(new ServerModule()) //Has Binding EndPoint.class to ServerEndPoint.class
     }
}

public SubscriberModule { 
     public void configure() {
         bind(ITransport.class).to(HttpTransport.class)
         install(new ClientModule()) //Has binding EndPoint.class to ClientEndPoint.class
     }
}

ここで、2 つのモジュールを一緒に使用する必要があるユース ケースに出会いました。解決策はありますか?

PS: 今のところ、名前付きバインディングは使用できません。私は(うまくいかない)のような解決策を探していました

public void configure() {
Injector injPublisher = Guice.createInjector(new PublisherModule());
Publisher pub = injPublisher.createInjector(Publisher.class)

bind(Publisher.class).toInstance(pub)
install(new SubscriberModule());
}

回避策はありますか?

4

1 に答える 1

0

@Jeff Bowman が提案したように、私はモジュールにアクセスでき、それを編集してモジュールを非公開にすることができます。

PS: 実際、上記の構成メソッド コードは機能しています。遅延して作成されるインスタンス (たとえば、パブリッシャーの ITransport 参照は @assisted inject factory を介して作成され、これもクライアント アクションに基づいて遅延してインスタンス化されます) は、Publisher モジュールのバインディングを使用します。一方、早期に作成されたインスタンスはサブスクライバー モジュールからのものです。この動作を理解する方法がわからない

于 2015-12-30T08:22:25.767 に答える