[英]how to handle dependency cycle dagger 2
I have two classes PdfTicketStorage
and OfflineHelper
they both depend on each other.我有两个类
PdfTicketStorage
和OfflineHelper
它们都相互依赖。
OfflineHelper class requires PdfTicketStorage to send data to firebase 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 requires offlineHelper to save data in the 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("");
}
}
As both are interdependent how can resolve the dependency cycle由于两者都是相互依赖的,如何解决依赖循环
error i get我得到的错误
[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]
ServiceModule服务模块
@Provides @PerApp
public PdfTicketStorage providePdfTicketStorage(App app, OfflineHelper offlineHelper) {
return new PdfTicketStorage(app.getString(R.string.cloud_storage_bucket), offlineHelper);
}
Could you suggest any alternatives to fix this please你能建议任何替代方法来解决这个问题吗
thanks R谢谢 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("");
}
}
The inconvenient is Lazy Injection directly impact parameter of your constructeur.不方便的是 Lazy Injection 直接影响您的构造函数的参数。 But if it's fine for you you can use it
但如果它适合你,你可以使用它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.