2

アシストインジェクションを使用して作成するクラス (WindowedCounter) があります。このクラスのファクトリをメソッド インターセプタに挿入する必要があります。現在、メソッド インターセプターは具体的なインスタンスにのみバインドできます。だから私の質問は、これをきちんと行う方法です。

以下のコードは、これまでに思いついたものです。ファクトリのファクトリ プロバイダを作成し、それを使用してモジュール自体でファクトリ インスタンスを取得します。次に、クラスの両方にバインドされ、インターセプターにバインドするインスタンスを取得するために使用されます。ただし、FactoryProvider クラスは Guice 3.0 で廃止されました。

これを行うGuice 3.0の方法は何ですか?

モジュールにインスタンスを挿入できますか?

Provider<WindowedCounterFactory> wCountFactoryProvider = FactoryProvider.newFactory(WindowedCounterFactory.class, WindowedCounter.class);

bind(WindowedCounterFactory.class).toProvider(wCountFactoryProvider);

WindowedCounterFactory wCountFactory = wCountFactoryProvider.get();

bindInterceptor(Matchers.any(), Matchers.annotatedWith(RateLimited.class), new RateLimitingInterceptor(wCountFactory));
4

1 に答える 1

1

FactoryProvider の代わりはFactoryModuleBuilderです。install代わりにモジュールを に返しますが、モジュールで呼び出しgetProviderて、タイプのインジェクター作成時に有効なプロバイダーを取得できます。

理論的には、インジェクターが作成されるまで型にアクセスしたくないはずです (たとえば、一部の依存関係が他のモジュールにバインドされている可能性があるため)。これには、MethodInterceptor で Provider を使用するようにリファクタリングするか、「親」インジェクターから Factory のインスタンスを取得できるように子インジェクターにインターセプターをインストールする必要がある場合があります。

install(new FactoryModuleBuilder().build(WindowedCounterFactory.class));
bindInterceptor(Matchers.any(), Matchers.annotatedWith(RateLimited.class),
    new RateLimitingInterceptor(getProvider(WindowedCounterFactory.class)));
于 2012-11-16T14:17:45.863 に答える