dagger 是否识别超级 class 依赖项

does dagger recognize super class dependencies

我的设置是这样的

interface ServiceProvider {...}

@Singleton
class ServiceProviderImpl implements ServiceProvider {...}

class ServiceConsumer {

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

不幸的是,这不起作用,因为它声称 ServiceProvider 没有提供程序,即使子类 ServiceProviderImpl.

有一个提供程序

我明白了

error: [Dagger/MissingBinding] c.b.d.s.ServiceProvider cannot be provided without an @Provides-annotated method.

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

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

这是设计使然,还是我做错了什么?

这是设计使然。如果您不在某处指定接口,Dagger 不会假设要使用的接口实现。

要绑定接口的实现,您应该使用 @Binds,不过,它是 @Provides 的优化版本,用于实现 -> 接口绑定。

@Binds
@Singleton
ServiceProvider serviceProvider(ServiceProviderImpl impl);