如何使用dagger正确实现回调以实现依赖注入

时间:2017-01-10 15:53:37

标签: java android dependency-injection callback dagger

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

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

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

这一切似乎都很好但只暴露了对LostLocationService的回调。我是否需要针对每个级别的依赖进行回调?或者更可能的是,我错过了什么?

1 个答案:

答案 0 :(得分:1)

我也想知道是否应该注入听众以及处理这些听众的最简单方法。

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

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

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

我也会在这里使用一些接口,因为以后更容易更改代码/测试它。定义一个LocationProviderInterface,公开一些实用程序函数(startService,stopService,addListener等...)。另外,定义一个监听器应该实现的接口(正如你已经做过的那样)。

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

  

我遇到了尝试从中创建回调的问题   lostLocationService,以便不会发送改装请求   直到它确认找到了一个位置。