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也注入了上面提到的PP引用的实例。
当我尝试使用第二个示例创建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
答案 0 :(得分:9)
您不需要在模块上使用@Provides方法来创建Dispatcher单例实例。只需使用@Inject注释Dispatcher构造函数,使用@Singleton注释类。注入Dispatcher实例时,Dagger将使用该实例。
@Singleton
public class Dispatcher
{
@Inject
public Dispatcher(..)
}