[英]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.