我的设置是这样的
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;}
这是设计上的,还是我做错了什么?
这是设计上的。如果你没有在某个地方指定一个接口的实现,Dagger不会假设使用它。
对于绑定一个接口的实现,你应该使用 @Binds
的优化版本,但它是 @Provides
用于实现-> 接口绑定。
@Binds
@Singleton
ServiceProvider serviceProvider(ServiceProviderImpl impl);