您好,我有dagger2的经验,但我试图获得一些Hilt的经验,所以我从演示应用程序开始,将演示从dagger2迁移到Hilt。在我的Dagger应用程序中,我有两个组件ApplicationComponent和ActivityComponent。ActivityComponent依赖于ApplicationComponent,所以我编写ActivityComponent如下:-
@ActivityScope
@Component(
dependencies = [ApplicationComponent::class],
modules = [ActivityModule::class]
)
interface ActivityComponent {
fun inject(dummyActivity: DummyActivity)
fun inject(dummyActivity2: DummyActivity2)
}
所以我认为我可以做以下事情,因为ActivityComponent是SingletonComponent/ApplicationComponent的子级,所以ActivityComponent可以访问ApplicationComponent中的任何绑定:-
@Module
@InstallIn(ApplicationComponent::class)
class ApplicationModule {
@Provides
@Singleton
fun provideDispatcherProvider(): DispatcherProvider = FlowDispatcherProvider()
@Provides
@Singleton
fun provideSharedPreferences(@ApplicationContext application: Application): SharedPreferences =
application.getSharedPreferences("project-prefs", Context.MODE_PRIVATE)
@Provides
@Singleton
fun provideNetworkHelper(@ApplicationContext application: Application): NetworkHelper = NetworkHelper(application)
@Provides
@Singleton
fun provideNetworkService(@ApplicationContext application: Application): NetworkService =
Networking.create(
BuildConfig.USERNAME,
BuildConfig.PASSWORD,
BuildConfig.BASE_URL,
application.cacheDir,
10 * 1024 * 1024 // 10MB
)
}
@Module
@InstallIn(ActivityComponent::class)
class ActivityModule {
@Provides
@ActivityScoped
fun provideMyHelper(
dispatcherProvider: DispatcherProvider,
networkHelper: NetworkHelper
):MyHelper = MyHelper(dispatcherProvider, networkHelper)
}
class MyHelper
(
private val dispatcherProvider: DispatcherProvider,
private val networkHelper: NetworkHelper
) {
}
@ActivityScoped
@AndroidEntryPoint
class DummyActivity(): AppCompatActivity() {
@Inject
lateinit var myhelper: MyHelper
}
但是当我尝试构建这段代码时,我得到了:-
error: [Dagger/MissingBinding] @com.mypackage.ApplicationContext android.app.application cannot be provided without an @Provides-annotated method.
public abstract static class SingletonC implements MyApplication_GeneratedInjector,
^
@com.mypackage.ApplicationContext android.app.Application is injected at
mypackage.module.ApplicationModule.provideNetworkHelper(application)
com.mypackage.NetworkHelper is injected at
com.mypackage.ActivityModule.provideMyHelper(�, networkHelper)
com.mypackage.MyHelper is injected at
com.mypackage.DummyActivity.myhelper
com.mypackage.DummyActivity is injected at
com.mypackage.DummyActivity.myhelper
显然您没有正确导入ApplicationContext限定符,它应该是dagger.hilt.android.qualifiers.ApplicationContext。
我的应用程序构建。gradle.kts看起来像: 我的项目构建。gradle.kts:
我创建了一个名为的简单库,其中有两个类。第一个是称为的Hilt模块 第二个是一个简单的类。 现在我想在我的一个应用程序中使用。所以我在应用程序中添加了依赖项。 所以我的问题是 为什么库模块的依赖项进入应用程序模块,而不使用的? 如何告诉Hilt“不要在外部库(gradle依赖项)中查找@provides?”除非我用标记模块
Apache ShardingSphere 在数据库治理模块使用 SPI 方式载入数据到配置中心和注册中心,进行实例熔断和数据库禁用。 目前,Apache ShardingSphere 内部支持 ZooKeeper,Etcd等常用的配置中心/注册中心。 此外,开发者可以使用其他第三方组件,并通过 SPI 的方式注入到 Apache ShardingSphere,从而使用该配置中心和注册中心,实现数
问题内容: 这是我目前拥有的并且可以正常工作: 现在,我想添加另一个依赖项。我将其更改为: 但是现在我收到此错误消息: FragmentFacebookLoginComponent依赖于多个作用域组件 我该如何解决?我如何有多个依赖关系? 如果我从一个组件中删除范围,则会收到此错误消息: AnotherComponent(无作用域)不能依赖范围内的组件 问题答案: 最后,我创建了一个具有正确范围的
最近,我发现了以下问题: 当我为我的项目设置依赖项管理时,我有一个child-pom,它使用具有依赖项的插件,我想要与在我的依赖项管理中声明的依赖项同步。 在根pom中,我在依赖项管理中声明: 在子pom中,我有一个插件需要gwt-user: 但是,如果我移除gwt-maven-plugin中使用的依赖版本,编译就会失败。 是不是还有别的办法可以实现呢? PS:在maven和maven插件中有一个
SOFARPC 使用了一些三方开源组件,他们分别是: 一些主要依赖: Netty under Apache License 2.0 SLF4j under the MIT License SOFA Bolt under Apache License 2.0 Javassist under Apache License 2.0 Resteasy under Apache License 2.0 SO
# 服务和组件 组件(components), 服务(services) 和依赖(dependencies): 和其他技术一样, Windsor 有一些基础概念你需要理解以便正确的使用它。不要害怕 - 他们可能有吓人复杂的名称和抽象的定义,但是掌握他们十分简单。 服务 :information_source: Windsor中的服务 和 WCF 服务: 术语服务(service)的使用十分泛滥,
我想知道下面是否可行以及如何实现。 我正在学习Spring boot的教程,其中提到我们可以有一个父依赖项。 然后定义没有版本号的依赖项。 这将在项目依赖项中添加依赖项版本1.5.6。释放sping-boot-starter和sping-boot-starter-web。 就像那样,我想找到什么是<代码> Spring-上下文 spring-jdbc Spring测试 谢谢!