1

Guice を使用してサーバーをブートストラップするフレームワークを作成しているので、Guice を拡張して、ユーザーがコードを構成するための便利なメソッドを提供するAbstractModuleを作成しました。Moduleただし、コードを起動する前に、構成が正常であることを確認したいと思います。したがって、ここのどこかに行かなければなりません:

// here, before the injector is created?
Injector injector = Guice.createInjector(someModule);               
// here, after configure() is called?
Object something = injector.getInstance(SomeServer.class);
// start the server

configure()モジュールがまだ編集されていないため、インジェクターが作成される前に確認できることはあまりないようです。Guice SPI を使用してモジュール構成を検証することについて言及されていますが、ドキュメントはあまり明確ではありません。Guice を使用している誰かが、インジェクターを使用する前にモジュールを検証するためのベスト プラクティスについて簡単に説明できますか?

4

1 に答える 1

1

私はこれを直接経験したことはあまりありませんが、次の3つの選択肢があるように思われます。

  • リファクタリングしMyConvenienceMethodModule.myConfigure()MyConvenienceMethodModule.validate()便利なメソッドが実行せずに有用な情報を提供するのに十分表現力があるかどうかconfigure()。理論的にはモックで呼び出すこともできますModule.configure(Binder)が、GuiceのEDSLでは複雑すぎます。ElementVisitor代わりに(以下)を使用してください。

  • バインディングステータスを確認するElements.getElements()ために特定のものを呼び出します。Module要素はさまざまなタイプである可能性があるため、代わりに作成することをお勧めします(おそらく、まだ作成されていない将来の要素からユーザーを保護ElementVisitorするためのサブクラスを作成することによって)。DefaultElementVisitorこのようにして、モジュールのコンテキスト内で、GuiceのEDSLのバインディングも含め、すべてのバインディングを適切に表示できます。これが最善の策だと思います。

  • 通常どおりインジェクターを作成し、呼び出しgetAllBindings()て調査します。構成の健全性が、個々のモジュールの構造ではなく、複数のモジュールの相互作用に依存する場合、これはおそらく最良のオプションです。この時点でチェックするだけでは、あるモジュールと別のモジュールを実際に区別することはできません。

于 2012-12-13T06:20:23.540 に答える