2014-02-17 39 views
3

我正在處理具有類型參數的註釋。這個類型參數用於實例化一個新對象。如何從僅在運行時已知的類型獲取匕首實例

有了Google Guice,我會注入'注射器'本身並使用它來找到正確的實例。 但是我對Dagger有點新,我沒有看到任何網絡上描述的解決方案。我知道ObjectGraph可以給我一個實例。我可以/我是否允許注入ObjectGraph本身?我會怎麼做?

回答

2

我設法做到這一點。不知道這是好...

酒吧:

public class Bar { 

    private ObjectGraph objectGraph; 

    @Inject 
    Bar(ObjectGraph objectGraph){ 

     this.objectGraph = objectGraph; 
    } 

    public ObjectGraph getObjectGraph() { 
     return objectGraph; 
    } 
} 

BarModule:

@Module(
     injects = Bar.class, 
     complete = false 
) 
public class BarModule { 
} 

FooModule:

@Module(
     includes = BarModule.class, 
     injects = ObjectGraph.class, 
     complete = true, 
     library = true 
) 
public class FooModule { 

    private ObjectGraph objectGraph; 

    public void setObjectGraph(ObjectGraph objectGraph){ 

     this.objectGraph = objectGraph; 
    } 

    @Provides @Singleton ObjectGraph providesObjectGraph(){ 
     return null; 
    } 
} 

入口點:

public class EntryPoint { 

    public static void main(String[] args){ 
     FooModule fooModule = new FooModule(); 
     ObjectGraph objectGraph = ObjectGraph.create(new BarModule(), fooModule); 
     fooModule.setObjectGraph(objectGraph); 

     System.out.println(objectGraph); 

     Bar bar = objectGraph.get(Bar.class); 
     ObjectGraph objectGraph1 = bar.getObjectGraph(); 

     System.out.println(objectGraph); 
    } 
} 
相關問題