繁体   English   中英

如何处理依赖循环匕首2

[英]how to handle dependency cycle dagger 2

我有两个类PdfTicketStorageOfflineHelper它们都相互依赖。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM