3

私は過去2日間、Guiceモジュールとその中で宣言したバインディングを取り巻く、コードの厄介なバグを見つめてきました。モジュールで約20のバインディングが宣言されていますが、そのうちの1つだけが機能していません。

私はここですべてのオプションを使い果たしmodule.print()ましたが、すべてのモジュールのバインディングの文字列バージョンを出力できるGuiceライブラリに-likeメソッドがあるかどうか疑問に思っています。それか、どういうわけか、Guiceに、欠陥のあるバインディングを読み取るたびに、Guiceが何をしているかをログに記録させます。

4

3 に答える 3

7
Injector injector = Guice.createInjector(myModuleInstance);
Map<Key<?>,Binding<?>> map = injector.getBindings();
for(Entry<Key<?>, Binding<?>> e : map.entrySet()) {
    System.out.println(e.getKey() + ": " + e.getValue());
}
于 2012-05-22T12:07:10.987 に答える
3

ほとんどの場合、herpylderpのソリューションが機能するはずです。インジェクターを作成せずにモジュール自体を確認したい場合(たとえば、インジェクターを作成できない構成エラーがある場合)、Guice SPIツールを使用して、一連のバインディングのリストを抽出できます。モジュール。それはまたあなたがそれを超えてもっとたくさんのことをすることを可能にします、しかしそれは要点を超えています;)

参照: https ://github.com/google/guice/wiki/ExtendingGuice#examples

リストされた例では、静的注入のケースを調べます。この場合、同じことを行うことができますが、代わりに。のvisit(Binding)メソッドをオーバーライドしますElementVisitor

参照: http: //google.github.io/guice/api-docs/4.2.2/javadoc/index.html?com / google / inject / spi / Elements.html

また、それぞれにこのような場合に役立つ可能性Bindingのあるメソッドがあることに注意してください。getSource()

注:私はこれまでこの正確なことを試したことがないことを認めます。それで、うまくいくかどうかを知らせてください。

于 2012-05-27T14:56:26.350 に答える
1

上記のIAmYourFajaの回答と同じですが、よりモダンなスタイルです。

import static java.util.stream.Collectors.joining;
String stringBinder = injector.getAllBindings().entrySet().stream()
            .map(e ->  e.getKey() + ": " +  e.getValue())
            .collect(joining("\n"));
于 2017-07-19T15:06:56.180 に答える