3

BookAPI バンドルにインターフェースがありBookImpl、実装バンドルにいくつかの実装があるとします。通常、シングルトンの場合、サービス レジストリを使用して実装を取得します。ただしBook、実装を取得するたびに新しいインスタンスを作成したいと思います。

OSGiでこれを行うための通常のパターンは何ですか?

サービス レジストリから取得し、ブック インスタンスを作成するために使用するBookCreatorメソッドを備えたサービスを用意することはできますか?createBook

4

2 に答える 2

4

それは良い選択肢です、はい。宣言型サービスやブループリントなど、サービス インジェクション フレームワークの 1 つを検討することもできます。ブループリントを使用すると、「ブック」の各コンシューマーが独自のインスタンスを取得できるように、プロトタイプ スコープを指定できます。これは、ユース ケースに役立つほど一意である場合とそうでない場合があります。(DSにも似たようなものがあります。)

ただし、同じコンシューマー インスタンスが複数の 'Book's を取得する必要があり、ファクトリを使用する場合でも、これらのフレームワークの 1 つを使用すると、サービス アクセスがより堅牢になります。

于 2012-07-29T02:32:56.680 に答える
3

2年前にこの問題についてじっくり考えた結果、提案されたソリューションである工場として機能するサービスが最善のソリューションであることがわかりました。その理由は、関連する型安全性です。宣言型サービスには、コンポーネントファクトリに組み込まれた可能性があり、コンポーネントインスタンスを作成できます。その使用は、タイプセーフファクトリほど簡単ではありません。コンセプトをフレームワークに入れることも考えましたが、それは単純なファクトリーサービスの容易さに欠けていました。

そうです、あなたのアイデアは私が知っている最良の解決策です。

于 2012-07-30T06:28:01.717 に答える