1

より狭いスコープでダウンストリームでのみ決定されるファイル名文字列にアクセスする必要があるシングルトンスコープのクラスがあります。通常の解決策は、プロバイダーをシングルトンスコープのクラスに挿入し、より狭いスコープのオブジェクトを実際に取得するときにprovider.get()を呼び出すことです。ただし、この場合、スコープの狭いオブジェクトは単なる文字列です。つまり、バインディングアノテーションを使用して、他のすべての文字列と区別する必要があります。2つの質問:

  1. バインディングアノテーションは、他の注入されたオブジェクトと同じように、注入されたプロバイダーに適用できますか?

  2. シングルトンスコープのクラスが実際に知る必要があるすべてのファイル名文字列を挿入する方がよいことに同意しますか、それともファイル名文字列が含まれるオブジェクトを挿入するというより単純なアプローチを取る必要があります(およびゲッター経由でアクセス可能)?後者のアプローチについて私が気に入らないのは、シングルトンクラスが、気にしないあらゆる種類のものにアクセスできることです。これは、一部の人々を泣かせる可能性があるようです。

ありがとう!

4

1 に答える 1

2
  1. はい、プロバイダーのバインディングアノテーションは機能するはずです。内のGuiceは、またはで表されるかKeyどうかに関係なく、(注釈、タイプ)タプルです。@Foo Bar@Foo Provider<Bar>

  2. 選択肢があれば、必要なのはそれだけなので、おそらくStringインスタンスを注入するだけです。見るのは少し奇妙かもしれませんが、@Filename Provider<String>あなたとあなたの共同メンテナがそれを理解している限り、それはGuiceでこれを表現する最も雄弁な方法です。

Guiceに対応するためにデザインを裏返しにしないように注意してください。@Filename Provider<String>にを挿入する前に、範囲の狭い依存関係をまったく取得しない@Singleton class FileSaver方が簡単ではないことを確認し、代わりにまたはメソッドのパラメータとしてファイル名を入力してください。:)FileSaversaveload

于 2013-02-11T04:53:26.493 に答える