spi*_*ce7 3 java android dependency-injection dagger
是否有可能让Dagger为你注射单身人士?
事实上,我只找到了一种手动为单身人士提供依赖关系的方法:
@Provides
@Singleton
public Dispatcher providesDispatcher(Context context, PPreferences preferences,
FileNameCache fileNameCache) {
return new Dispatcher(context, preferences, fileNameCache);
}
Run Code Online (Sandbox Code Playgroud)
这是定义单身人士的唯一方法吗?我更喜欢做的是以下内容,以便Dagger自己注入依赖项,但这样做会给我一个错误.
@Provides
@Singleton
public Dispatcher providesDispatcher(Dispatcher dispacher) {
return dispacher;
}
Run Code Online (Sandbox Code Playgroud)
也许还有另一种方法来定义单身,这将允许我注入其他单身人士吗?
任何帮助表示赞赏.
编辑: 我刚刚意识到我正在使用另一个Singleton进行第二种方法,但是当我将实现映射到接口时,情况略有不同:
@Provides
@Singleton
public Tracker providesTracker(TrackerImpl tracker) {
return tracker;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
您不需要在模块上使用@Provides方法来创建Dispatcher单例实例.只需使用@Inject注释Dispatcher构造函数,使用@Singleton注释类.注入Dispatcher实例时,Dagger将使用该实例.
@Singleton
public class Dispatcher
{
@Inject
public Dispatcher(..)
}
Run Code Online (Sandbox Code Playgroud)