【问题标题】:How to correctly implement callbacks using dagger for dependency injection如何使用 dagger 进行依赖注入正确实现回调
【发布时间】:2023-03-20 07:56:01
【问题描述】:

我正在使用 Mapzen Lost api 进行定位服务,使用 dagger 进行依赖注入和改造以获取设备当前位置的天气数据。我在尝试从 lostLocationService 创建回调时遇到问题,以便在确认已找到位置之前不会发送改造请求。

我的问题是依赖关系。我有一个 Presenter,它依赖于 LocationService,并且依赖于 LostLocationService。 我的 LostLocationService 类中有一个位置侦听器,我在其中覆盖了 onLocationChanged()

LocationListener listener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        myLocationListener.onLocationFound();
    }
};

这一切看起来都很好,但只是将回调公开给 LostLocationService。我需要为每个级别的依赖进行回调吗?或者更有可能,我错过了什么?

【问题讨论】:

    标签: java android dependency-injection callback dagger


    【解决方案1】:

    我也想知道是否应该注入侦听器以及处理它们的最简单方法是什么。

    在您的情况下,也许您应该考虑使用侦听器列表(如果可能)将事件分派到所有相关实例。如果每个侦听器都有明确定义的生命周期并且可以预测性地注册/注销,则此方法效果很好。这样,您可以避免有一些“级联”的听众。

    我不知道您的实现细节,但我想您的 LocationService 在这里充当抽象层?我是这样的,我会这样做:

    • 定义一个依赖于 LostLocationService 的 LocationService。 LocationService 将处理 LostLocationService 的所有细节。
    • Lo​​cationService 监听 LostLocationService 报告的事件。
    • Lo​​cationService 有一个动态增长的侦听器列表(您可以添加和删除它们)。
    • Lo​​cationService 在需要时将主要事件报告给它的所有监听器。

    我也会在这里使用一些接口,因为以后更改代码/测试它会更容易。定义一个 LocationProviderInterface 公开一些实用功能(startService、stopService、addListener 等)。另外,定义一个侦听器应该实现的接口(就像您已经完成的那样)。

    另外,请不要犹豫,详细说明您的第一点。

    我在尝试从 lostLocationService 以便不会发送改造请求 直到确认已找到位置。

    【讨论】:

    • 感谢@Gordak。我已经离开这个项目有一段时间了,所以才看到你的回复。
    • 关于 LocationService 作为抽象层的说法是正确的。我认为您对 LocationService 需要侦听 LostLocationService 的回调也是正确的。是的,我已经有一个侦听器接口,其他接口是个好主意 :-) 详细说明我的初始点:- 我有回调设置,但是当我尝试响应时获得一个空对象引用。我认为这是由于依赖关系,并试图从演示者(它无权访问回调)这样做。我将实施第二级侦听器并返回我的发现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多