我正在尝试将下面的代码更新为dagger2,但是我收到ObjectGraph
的错误消息:
import dagger.ObjectGraph;
public class App extends Application {
private static App instance;
private ObjectGraph objectGraph;
public App() {
instance = this;
}
@Override
public void onCreate() {
super.onCreate();
objectGraph = ObjectGraph.create(new AppModule());
}
public static void injectMembers(Object object) {
getInstance().objectGraph.inject(object);
}
public static <T>T get(Class<T> klass) {
return getInstance().objectGraph.get(klass);
}
public static App getInstance() {
return instance;
}
}
如何将其更新为必须使用哪个类而不是
ObjectGraph
?本课程中使用的
injectMembers
public class MyJobManager extends JobManager {
public MyJobManager(Context context) {
super(context, new Configuration.Builder(context)
.injector(new DependencyInjector() {
@Override
public void inject(BaseJob baseJob) {
App.injectMembers(baseJob);
}
})
.build());
}
}
现在我如何注入组件?
我的组件:
@ActivitiesScope
@Component(dependencies = GithubApplicationComponent.class)
public interface ApplicationComponent {
void inject(ActivityRegister activityRegister);
void inject(ActivityStartUpApplication activityStartUpApplication);
void inject(GetLatestRepositories getLatestRepositories);
}
最佳答案
Dagger 2不使用ObjectGraph。它不使用任何东西来代替它。 Dagger1在运行时通过反射进行注入,并使用ObjectGraph提供该功能。 Dagger 2在编译时进行注入,因此它不需要运行时对象来表示图形。相反,您希望构建一个组件来链接要提供的模块。然后,您可以使用该组件进行注入。
有关更多详细信息,请参见https://google.github.io/dagger/dagger-1-migration.html。