2016-10-05 9 views
0

私のEclipse 3.xのようなプロジェクト内で「DI」の種類を統合しようとしています。new()でインスタンス化されたインスタンスからEclipse Sisu作成Beanを取得する方法

だから私はこのようないくつかのビジネス "豆に定義:

@Named 
class A{...} 

@Named class B{ @Inject private A a; 
public void doSmtg() { //use a 
} 

をそして最後に、私は私がB Beanを注入したい(plugin.xmlの拡張ポイントで登録)のEclipse AbstractHandlerクラスを持っています。

public class UIHandler extends AbstractHandler implements IHandler { 

    @Override 
    public Object execute(ExecutionEvent event) throws ExecutionException { 
// I want to get my B bean where A is injected 
}} 

実現可能ですか?これどうやってするの? SISUアクティベーターを見ると

答えて

0

は、私がSisuTrackerコードを使用し、現在のBeanを取得するためにそのスニペットを使用します。

this.resourceToAssetFinder = (ILocator<R, Asset>) Activator.getPlugin().findLocator(Activator.getPlugin().getBundle().getBundleContext()).locate(Key.get(IResourceToAssetLocator.class)).iterator().next().getValue(); 

この方法は、すべてのBeanは、私のバンドルのクラスパスにロードされます。

サイド情報、SISUをブートストラップするために必要な依存関係は、以下のとおりです。

<artifact> 
    <id>com.google.guava:guava:${com.google.guava_guava.version}</id> 
</artifact> 
<artifact> 
    <id>com.google.inject:guice:${com.google.inject_guice.version}</id> 
    <transitive>false</transitive> 
</artifact> 
<artifact> 
     <id>com.google.inject.extensions:guice-multibindings:${com.google.inject.extensions_guice-multibindings.version}</id> 
     <transitive>false</transitive> 
</artifact> 
<artifact>  <id>org.eclipse.sisu:org.eclipse.sisu.inject:${org.eclipse.sisu.version}</id> 
</artifact> 
関連する問題