Inyectar objetos de objetos en Class Util (usando Dagger)
Yo alguna vez probar algunas cosas con Dagger, después de supervisar la serie de artículos aquí: http://antonioleiva.com/dependency-injection-android-dagger-part-1/ , volvió para obtener más información, vi algunos buenos ejemplos como Estos: https://github.com/adennie/fb-android-dagger , la mayoría de los cuales se centran en la inyección de dependencias de Activity
, Fragment
, Service
y relacionados. Estoy deseando hacer algo similar con RoboGuice.
En RoboGuice
- ¿Algún ejemplo simple usando roboguice con fragmentos en android?
- Liberando el ayudante de ORMLite en @Singleton
- Interceptor de actividad
- Android: Cómo ampliar mi clase de actividad con RoboActivity + ActionBarActivity
- RoboGuice 3.0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector
public class Utils { @InjectResource(R.string.hello_world) private String hello; public void showLog(){ System.out.println("String from injected resource : " + hello); } }
En daga
public class Utils { @Inject Resources mResource; public void showLog() { System.out.println( "String from injected resource : " + this.mResource.getString( R.string.hello_world ) ); } }
He creado un módulo en mi aplicación:
@Module( injects = {Utils.class }, complete = false, library = true ) public class ResourceModule { Context mContext; public ResourceModule ( final Context mContext ) { this.mContext = mContext; } @Provides @Singleton Resources provideResources() { return this.mContext.getResources(); } }
Intenté esto en mi actividad
Utils mUtils = new Utils(); mUtils.showLog();
Pero estoy recibiendo NullPointerException
. Alguien ya hizo algo similar?
- Android y RoboGuice - Inyectar vistas en Fragmento?
- Roboguice 2.0 inyecta la aplicación en POJO
- ORMLite para Android: enlazar DAO con Roboguice
- ¿Cómo se inyecta impl de alguna interfaz en una actividad de Android utilizando Guice
- Los objetos inyectados se convirtieron en nulos después de actualizar a Roboguice 3
- Cómo utilizar RoboDialogFragment con un diseño personalizado
- Deserializando un tipo genérico con Jackson
- ¿Tiene sentido usar Guice para Android
Tienes que inyectar el objeto usando el método de inject
.
Asumiendo que su ObjectGraph
se inicializa en la clase App
que es una subclase de la Application
y expone el método public inject
con la implementación como a continuación:
public void inject(Object object) { mObjectGraph.inject(object); }
Después de crear la instancia de Utils
tiene que inyectar sus dependencias.
Utils mUtils = new Utils(); ((App) getApplication).inject(mUtils); mUtils.showLog();
Editar:
También puede utilizar la inyección del constructor (no es necesario pasar el objeto a ObjectGraph
)
public class Utils { private final Resources mResource; @Inject public Utils(Resources resources) { mResources = resources; } public void showLog() { System.out.println( "String from injected resource : " + this.mResource.getString( R.string.hello_world ) ); } }
Con la inyección del constructor el objeto debe ser creado por el ObjectGraph
Utils mUtils = mObjectGraph.get(Utils.class);
- Obtenga la Apertura de la cámara Android y el tiempo de exposición
- Importar proyecto android en Intellij IDEA / utilizar recursos compartidos