2016-11-30 4 views
2

私は2つのクラス、クラスAクラスBを持っています。 は、Application Modelで定義されているRCPアプリケーションでPartを表示するためのクラスです。 Bは、データを取得するためのカスタマイズされたクラスであり、データが変更されるたびに、クラスAに関連するUIを更新するように通知する必要があります。私は質問hereに、これらの2つのクラスをどのように調整するかについて質問しました。しかし、問題は、がアプリケーションモデルで定義されていないため、eventBroker.post()を呼び出すたびに、nullを返します。私は上記のため、しかし、上記のコードで定義されていないIEclipseContextを取得する方法がわからないEclipse RCPアプリケーションのアプリケーションモデルで定義されていないクラスにIEventBrokerを挿入する方法はありますか?

B b = new B(); 
ContextInjectionFactory.inject(b,IEclipseContext); 
b.execute(); 

:私が試した何

は、私はクラスBを呼び出すときは、次の方法でありますアプリケーションモデルで定義されたクラスでコードが実行されません。私は本当に誰かがこの問題についての光を放つことができれば感謝します。

答えて

0

注入システムが知っているどこかから始め、注入システムを使ってすべての中間クラスを作成する必要があります。

これは、ContextInjectionFactory.makeまたはContextInjectionFactory.injectを使用してクラスを作成/注入できるコマンドハンドラのようなものです。インジェクションで作成されたクラスを得るには他にもいくつかの方法がありますが、それらはすべて、アプリケーションモデルが知っているものから始めなければなりません。

アプリケーション全体で使用可能にしたいクラスの場合は、アプリケーションでそれらを作成するクラスLifeCycle classは、アプリケーションモデルで知られている別の場所です。

代わりにあなたがアクセスすることができますOSGiサービス・コンテキストを使用することができます。

BundleContext bundleContext = ... your plugin's bundle context 

IEclipseContext serviceContext = EclipseContextFactory.getServiceContext(bundleContext); 

このコンテキストは非常に限られた内容を持っていますが、イベント・ブローカを含んでいます。

関連する問題