2017-09-09 2 views
0

J'utilise la nouvelle injection Android de poignard 2.11, et j'ai ce module simple:Objet de passage au module avec une nouvelle injection Android

@Module 
public class MyModule{ 

@MyScope 
@Provides 
SomeClass provideSomeClass(Context context){ 
    return new SomeClass(context); 
} 

} 

comme vous pouvez le voir, je dois passer un contexte constructeur SomeClass . mais je ne sais pas comment faire ça.

sans injecteur Android, je peux le faire comme ci-dessous:

@Module 
public class MyModule{ 

private Context context; 

public MyModule(Context context){ 
    this.context = context; 
} 

@MyScope 
@Provides 
Context provideContext(){return context;} 

@MyScope 
@Provides 
SomeClass provideSomeClass(Context context){ 
    return new SomeClass(context); 
} 

} 

mais étant donné que je ne peux pas accéder à MyModule avec AndroidInjection.inject() je ne peux pas passer contexte à elle.

Répondre

1

Si votre module est connecté à l'application en tant que singleton, vous pouvez utiliser le contexte d'application directement. Ou vous pouvez joindre votre module à votre activité/fragment. Dans ce cas, vous n'avez pas besoin de passer de paramètre à votre module car Dagger est déjà passé votre activité/fragment à votre module attaché. Je veux vous montrer comme un échantillon simple. Par exemple, vous avez MainActivity et MainActivityModule. Pour obtenir le contexte de votre activité sur votre MainActivityModule, appelez le AndroidInjection.inject(this); dans MainActivity (avant super.onCreate()). Voici ce module qui a un contexte.

@Module 
public class MainActivityModule{ 

public MainActivityModule(MainActivity mainActivity){ 
    // you can use your main activity as a context. 
} 
+0

Merci pour votre réponse, mais je veux utiliser MyModule pour plusieurs activités et j'ai besoin de leur contexte de base. –

+0

Vous pouvez créer votre module en tant que singleton et vous pouvez transmettre le contexte de l'application à votre module lorsque vous y injectez. – mertsimsek

+0

Êtes-vous sûr que c'est une bonne pratique? btw j'ai besoin de contexte de base pas de contexte d'application. –