是否可以让 Dagger 为您注入单例?
就目前而言,我只找到了一种手动向单例提供依赖项的方法:
@Provides
@Singleton
public Dispatcher providesDispatcher(Context context, PPreferences preferences,
FileNameCache fileNameCache) {
return new Dispatcher(context, preferences, fileNameCache);
}
这是定义单例的唯一方法吗?我更喜欢做如下的事情,这样 Dagger 就会自己注入依赖项,但是这样做会给我一个错误。
@Provides
@Singleton
public Dispatcher providesDispatcher(Dispatcher dispacher) {
return dispacher;
}
也许还有另一种定义单例的方法,可以让我将其他单例注入其中?
任何帮助表示赞赏。
编辑: 我刚刚意识到我正在使用另一个 Singleton 执行第二种方法,但是情况略有不同,因为我将实现映射到接口:
@Provides
@Singleton
public Tracker providesTracker(TrackerImpl tracker) {
return tracker;
}
TrackerImpl 也被注入了上面提到的 PPreferences 的一个实例。
当我尝试使用第二个示例创建 Dispatcher 时,这是我得到的错误:
error: Unknown error java.lang.IllegalStateException thrown by javac in graph validation: Dependency cycle:
0. com.example.test.Dispatcher bound by @Singleton/ProviderMethodBinding[provideKey="com.example.test.Dispatcher", memberskey="null"]
0. com.example.test.Dispatcher