dagger是否能识别超级类的依赖关系

问题描述 投票:0回答:1

我的设置是这样的

interface ServiceProvider {...}

@Singleton
class ServiceProviderImpl implements ServiceProvider {...}

class ServiceConsumer {

 @Inject
 ServiceConsumer(ServiceProvider prov) {...}
}

遗憾的是,这并不奏效,因为它声称没有供应商为你提供。ServiceProvider虽说有一个子类 ServiceProviderImpl.

我得到

错误。[DaggerMissingBinding] c.b.d.s.ServiceProvider不能在没有@Provides-annotated方法的情况下提供。

我可以通过在模块中添加以下内容来解决这个问题

 @Provides
 @Singleton
 ServiceProvider serviceProvider(ServiceProviderImpl impl) {return impl;}

这是设计上的,还是我做错了什么?

dependency-injection dagger-2
1个回答
2
投票

这是设计上的。如果你没有在某个地方指定一个接口的实现,Dagger不会假设使用它。

对于绑定一个接口的实现,你应该使用 @Binds的优化版本,但它是 @Provides 用于实现-> 接口绑定。

@Binds
@Singleton
ServiceProvider serviceProvider(ServiceProviderImpl impl);
© www.soinside.com 2019 - 2024. All rights reserved.