AFAIKでは、DSを使用して1つのコンシューマポリシーを適用することはできません。
一見してServiceFactoryかもしれないかもしれませんし、もしそれができれば最も簡単な方法です。
は、しかし1 caveatがあります: "The Framework caches the value returned (unless it is null), and will return the same service object on any future call to BundleContext.getService for the same bundle. This means the Framework must not allow this method to be concurrently called for the same bundle"
だから私は、それが次のシナリオで失敗すると思います:
Given Bundle A, Service S and Bundle B;
A gets S, then A ungets S, Bgets S, then A gets S.
フレームワークのキャッシュがうまくキャッシュされたSが干渉し、与える可能性もそれはすでにあると思いました
私が考えることのできる唯一の代替案は、FindHookを使用することですが、これはもう少し低レベルですが、完全性のために他のhooks(EventHook、ListenerHook)。あなたが他のバンドルへのサービスの可用性をマスクすることができますフックを使用して
。あなたのフックは状態を保持するので、デバイスサービスと同じバンドルに入れたいので、デバイスサービスのバンドルを止めることなくフックを止めることは不可能です。
標準も述べて:私はそれが問題になるとは考えていないので、「バンドルは、サービスの使用を解放するまでのServiceFactoryで返されるサービスオブジェクトは、フレームワークによってキャッシュされています」。 –
バンドルが毎回新しいインスタンスとサービスを同時に消費する必要がある場合はどうなりますか? どうすれば対応できますか? – Ravish
こんにちは@Ravz、私はニールの答え、私はこの質問に答えてComponentFactoryの例を持ってあなたの質問を参照してくださいhttp://stackoverflow.com/questions/7033222/osgi-using-servicefactories/7080234#7080234 HTH – earcam