使用Dagger,對於簡單的事情來說工作起來相當不錯,但當我將參數傳遞給模塊時,我不理解規則。基本上是想要將應用程序上下文傳遞給提供者方法,並創建需要上下文的Volles請求隊列。將參數從模塊傳遞到模塊
創建我的模塊是這樣的:
public static Object[] getModules(@ApplicationContext final Context appContext)
{
return new Object[]{new ApplicationContextModule(appContext),new ReleaseModules()};
}
應用程序上下文模塊:
@Module(library = true, includes = RequestQueueModule.class)
public final class ApplicationContextModule
{
private final Context applicationContext;
public ApplicationContextModule(final Context aContext)
{
Preconditions.checkNotNull(aContext, "Application Context");
//
applicationContext = aContext;
}
@ApplicationContext
@Provides
//@Singleton
public Context provideApplicationContext()
{
return applicationContext;
}
}
RequestQueueModule:
@Module(injects = {AutoCacheService.class, ServiceListFragment.class})
public class RequestQueueModule
{
//private final Context context;
//@Inject
public RequestQueueModule()
{
//context = theContext;
}
@Singleton
@Provides
public com.android.volley.RequestQueue provideRequestQueue(@ApplicationContext final Context context)
{
return Volley.newRequestQueue(context);
}
}
正如你可以看到我打了一下與構造器注入,看起來我很想理解這第一個。無論如何,使用@ApplicationContext Annotation來澄清App Context應該被注入。但我得到這個編譯錯誤:
error: @com.app.android.annotation.ApplicationContext()/android.content.Context required by provideRequestQueue(android.content.Context) for com.app.android.application.modules.RequestQueueModule error: No injectable members on com.android.volley.RequestQueue. Do you want to add an injectable constructor? required by com.app.android.io.service.AutoCacheService for com.app.android.application.modules.ReleaseModules
我花了幾個小時這個問題。但不能真正看到問題。如果可能,我也儘量避免使用library = true開關,因爲我理解它會在編譯期間禁用Graph檢查。一些食譜會很好理解這個更好...
更新:看起來像this SO問題是類似於我的。
你應該在'RequestQueueModule'上設置'complete = false'(可能'library = true')。這有幫助嗎? –