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);
我的设置是这样的
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);