package com.lyft.scoop.dagger; import android.content.Context; import android.view.View; import com.lyft.scoop.Scoop; import com.lyft.scoop.Screen; import dagger.ObjectGraph; public class DaggerInjector { public static final String SERVICE_NAME = "dagger"; private ObjectGraph objectGraph; public DaggerInjector(ObjectGraph objectGraph) { this.objectGraph = objectGraph; } public <T> void inject(T obj) { objectGraph.inject(obj); } public <T> T get(Class<T> clazz) { return objectGraph.get(clazz); } public DaggerInjector extend(Object... modules) { ObjectGraph objectGraph = this.objectGraph.plus(modules); return new DaggerInjector(objectGraph); } public static DaggerInjector fromScoop(Scoop scoop) { return scoop.findService(SERVICE_NAME); } public static DaggerInjector fromView(View view) { return Scoop.fromView(view).findService(SERVICE_NAME); } public static DaggerInjector fromContext(Context context) { return Scoop.fromContext(context).findService(SERVICE_NAME); } public static Scoop extend(final Scoop parentScoop, final Object... modules) { final Screen parentScreen = Screen.fromScoop(parentScoop); final Scoop.Builder scoopBuilder = new Scoop.Builder(parentScreen.getClass().getSimpleName(), parentScoop) .service(Screen.SERVICE_NAME, parentScreen); final DaggerInjector daggerInjector = DaggerInjector.fromScoop(parentScoop).extend(modules); return scoopBuilder .service(DaggerInjector.SERVICE_NAME, daggerInjector).build(); } }