2010-08-06 8 views
2

J'ai une classe qui charge des fichiers dans un objet spécifique qui contient lui-même plusieurs objets qui contiennent des champs différents. Exmaple:Google Guice 2.0

class RootItem 
{ 
public SubItemType1 sub1; 
} 

class SubItemType1 
{ 
public SubItemType2 sub2; 
public int data1; 
public float data2; 
} 

class SubItemType2 
{ 
public int data3; 
public boolean data4; 
} 

Bon maintenant j'ai une autre classe qui contient une méthode qui renverra un RootItem avec tous les sous-éléments fixés à des valeurs spécifiques. Ensuite, je voudrais, en utilisant Guice, pouvoir appeler ce chargeur une fois et ensuite chaque fois que quelqu'un demande un @Inject de la classe SubItemType1, alors l'objet RootItem.sub1 est retourné et si quelqu'un demande une classe SubItemType2 puis RootItem. sub1.sub2 est renvoyé.

Est-ce que cela peut être accompli?

Merci,

ExtremeCoder

Répondre

4

Dans votre module:

private RootItem rootItem; /* Initialize this field e.g. in the module's constructor */ 

@Provides 
RootItem provideRootItem() { 
    return rootItem; 
} 

@Provides 
SubItemType1 provideSubItemType1() { 
    return rootItem.sub1; 
} 

@Provides 
SubItemType2 provideSubItemType2() { 
    return rootItem.sub1.sub2; 
} 

Ensuite, vous pouvez injecter le RootItem, SubItemType1 et SubItemType2 dans votre code comme d'habitude.

+0

(Vous pouvez également utiliser bind (RootItem.class) .toInstance (rootItem) etc. - Personnellement, je préfère les méthodes @Provides, car elles fonctionnent également avec Google Gin) –