[英]how to handle dependency cycle dagger 2
我有兩個類PdfTicketStorage
和OfflineHelper
它們都相互依賴。
OfflineHelper class 需要 PdfTicketStorage 發送數據到 firebase
class OfflineHelper @Inject constructor(
private val app: App,
private val settings: Settings,
private val pdfTicketStorage: PdfTicketStorage,
) {
private fun postPrintedTicket(offlineData: OfflineData) {
//SENDS DATA TO FIREBASE
val offlinePrintedTicketInfo = gson.fromJson(offlineData.requestInfoJson, OfflinePrintedTicketInfo::class.java)
pdfTicketStorage.store(offlinePrintedTicketInfo.pdfTicketFilePath, offlinePrintedTicketInfo.pdfTicketContent)
}
fun saveOfflineDataWithPdf() {
//save data to database
}
}
PdfTicketStorage 需要offlineHelper 在數據庫中保存數據
public class PdfTicketStorage {
private final String cloudStorageBucket;
private final OfflineHelper offlineHelper;
public PdfTicketStorage(String cloudStorageBucket, OfflineHelper offlineHelper) {
this.cloudStorageBucket = cloudStorageBucket;
this.offlineHelper = offlineHelper;
}
public Single<String> storeTest(final String filePath, final byte[] fileContents, final String fuelOrderId) {
offlineHelper.saveOfflineDataWithPdf();
return Single.just("");
}
}
由於兩者都是相互依賴的,如何解決依賴循環
我得到的錯誤
[Dagger/DependencyCycle] Found a dependency cycle:
public interface AppComponent {
^
com.xx.xxx.clean.offline.OfflineHelper is injected at
com.xx.xxx.injection.modules.ServiceModule.providePdfTicketStorage(…, offlineHelper)
com.xx.xxx.printing.storage.PdfTicketStorage is injected at
com.xx.xxx.clean.offline.OfflineHelper(…, pdfTicketStorage, …)
com.xx.xxx.clean.offline.OfflineHelper is injected at
com.xx.xxx.activities.MainActivity.offlineHelper
com.xx.xxx.activities.MainActivity is injected at
com.xxx.xx.injection.components.ActivityComponent.inject(com.xx.xxx.activities.MainActivity) [com.xx.xxx.injection.components.AppComponent → com.xx.xxx.injection.components.ActivityComponent]
服務模塊
@Provides @PerApp
public PdfTicketStorage providePdfTicketStorage(App app, OfflineHelper offlineHelper) {
return new PdfTicketStorage(app.getString(R.string.cloud_storage_bucket), offlineHelper);
}
你能建議任何替代方法來解決這個問題嗎
謝謝 R
你應該使用懶惰
public class PdfTicketStorage {
private final String cloudStorageBucket;
private final Lazy<OfflineHelper> offlineHelper;
public PdfTicketStorage(String cloudStorageBucket, Lazy<OfflineHelper> offlineHelper) {
this.cloudStorageBucket = cloudStorageBucket;
this.offlineHelper = offlineHelper;
}
public Single<String> storeTest(final String filePath, final byte[] fileContents, final String fuelOrderId) {
offlineHelper.get().saveOfflineDataWithPdf();
return Single.just("");
}
}
不方便的是 Lazy Injection 直接影響您的構造函數的參數。 但如果它適合你,你可以使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.