- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
您好,可以在我的 AppComponent 中添加测试模块吗?
下面是我对 appComponent 的真实表示
@Singleton
@Component(modules = arrayOf(MainModule::class,
AnalyticsModule::class,
MainAndroidBinding::class,
AccountAndroidBinding::class,
AndroidSupportInjectionModule::class,
HomeAndroidBinding::class,
NetworkModule::class))
interface ApplicationComponent : AndroidInjector<DaggerApplication> {
fun inject(myApplication: MyApplication)
override fun inject(instance: DaggerApplication)
@Component.Builder
interface Builder {
@BindsInstance
fun application(applicaton: Application): Builder
fun build(): ApplicationComponent
}
}
我可以像这样直接将测试模块添加到 testAppComponent,但它并没有给我提供很大的灵 active 来动态添加不同的 testModule。
@Singleton
@Component(modules = [
(MainModuleTest::class),
(TestMainAndroidBindingTest::class),
(AccountAndroidBindingTest::class),
(AnalyticsModuleTest::class),
(AndroidSupportInjectionModule::class),
(NetworkModuleTest::class)])
interface TestAppComponent : ApplicationComponent {
fun inject(launchActivityTest: LaunchActivityTest)
@Component.Builder
interface Builder {
@BindsInstance
fun application(applicaton: Application): Builder
fun build(): TestAppComponent
}
}
这是我的 MyApplication 类
class MyApplication : DaggerApplication() {
companion object {
private lateinit var application: MyApplication
fun get(): MyApplication {
return application
}
}
@Inject
lateinit var dispatchingActivityInjector: DispatchingAndroidInjector<Activity>
lateinit var applicationComponent: ApplicationComponent
override fun onCreate() {
super.onCreate()
application = this
}
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
applicationComponent = DaggerApplicationComponent.builder()
.application(this)
.build()
applicationComponent.inject(this)
return applicationComponent
}
override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base)
MultiDex.install(this)
}
}
在 LaunchActivityTest 上,这是我设置它以使用此 testApp 组件的方式
@Before
fun setUp() {
val app = InstrumentationRegistry.getTargetContext().applicationContext as MyApplication
val testAppComponent = DaggerTestAppComponent.builder().application(app).build()
app.applicationComponent = testAppComponent
testAppComponent.inject(this)
}
我一直在遵循本指南,直到我偶然发现我的 DaggerTestAppComponent 没有公开模块供我动态添加自己,因为我的 AppComponent 类扩展了 AndroidInjector,它会自动为您添加模块
https://proandroiddev.com/writing-espresso-instrumentation-tests-with-dagger2-kotlin-d30f12c4769b
上面的动态添加它的模块是这样的:
testAppComponent = DaggerTestAppComponent.builder()
.appModule(AppModule(app))
.apiModule(TestApiModule())
.prefModule(TestPrefModule())
.build()
我不能这样做,除非我重做我的 AppComponent,这样它就不会扩展 AndroidInjector。如果我这样做,那么在我真正的 impl 代码中我必须手动设置模块。
还有其他办法吗?
最佳答案
您应该向您的组件构建器添加一个函数并使用“BindsInstance”。
示例组件
@Singleton
@Component(modules = {
AndroidSupportInjectionModule.class,
ApplicationTestModule.class,
ActivityBuilder.class})
public interface TestExampleComponent extends AndroidInjector<DaggerApplication> {
void inject(TestApplication app);
@Override
void inject(DaggerApplication instance);
@Component.Builder
interface Builder {
@BindsInstance
TestExampleComponent.Builder application(DaggerApplication application);
Builder applicationModule(ApplicationTestModule appTestModule);
TestExampleComponent build();
}
}
在这个组件中,我使用“BindsInstance”添加了 applicationModule 函数,我可以传递 ApplicationTestModule。
然后你可以添加不同的测试模块。
TestApplicationComponent appComponent = DaggerTestAppComponent.builder().application(this).
applicationModule(appTestModule).build();
appComponent.inject(this);
关于android - 在 appComponent dagger 2 中动态添加测试模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50580389/
我在AppComponent中加载数据 然后在people.component中引用这些数据 但是 people.component 首先加载。 应用组件 ngOnInit() { pr
免责声明:是的,我看到有更多“为组件 AppComponent 指定的模板不是字符串”相关问题,但没有一个描述我遇到的具体问题。 当我在 ng build 中不使用 AoT 进行编译时出现此运行时错误
我有一个 Angular 6 应用程序。起初它只是一个页面(比如说“搜索页面”),所以我将页面内容放入 app.component.html 和相关函数等到app.component.ts。所以搜索页
我正在尝试制作一个简单的单组件应用程序来测试 Angular2,但我非常坚持访问我的应用程序组件中的 RouteParams。 这是我目前所拥有的: @Component({ selector:
@NgModule({ declarations: [ AppComponent , DesktopComponent ], imports: [ BrowserM
我正在 build 一个大项目,这是其中的一部分。我的问题很常见,但是我没有找到解决它的方法。真的需要你的帮助!我收到类型错误。我很乐意提供任何帮助 Uncaught Error: Can't res
嘿,我是 Angular 和 Web 开发的新手,我学习了一些教程。 当尝试合并使用我的 Firebase 数据库时,在本地编译(使用 ng serve)时我的应用程序失败了。返回:“AppCompo
下面是我的表格。在 ngserve -o 期间工作正常。没有提出任何问题。没有出现任何错误。 Your Mobile Money Account Name
我试图从 json 响应中获取 results 字段,但是我收到错误 Property 'results' does not exist on type 'AppComponent import {
我有一个简单的应用程序,它通过 Appcomponent 加载 Material 设计 Ui。我需要在加载应用程序组件之前对用户进行身份验证。 应用组件如下 import {Component} fr
我在 Typescript Monorepo 中操作。我想向 Monorepo 添加一个带有 Jest 测试的 Angular 8 前端。但是我遇到了一些问题。 我正在使用 Angular CLI:
我正在尝试使用 Angular 6 构建应用程序,但我仍在设置所有内容。但是我的应用程序中的依赖注入(inject)似乎有问题。 它无法解析任何构造函数参数。它们都会导致 Uncaught Error
我正在以 angular 编写 spec.ts 文件并收到以下错误: Failed: Illegal state: Could not load the summary for directive A
我使用 Angular 5.2.0,我导航到: /page/28/1 对应于: {path: 'page/:albumId/:pageNo', component: AlbumPageComponen
我收到此错误并搜索了解决方案,但似乎一切都应该正确设置。 完整的错误是:“不变违规:无法在“Connect(AppComponent)”的上下文中找到“store”。要么将根组件包装在 a 中,要么将
在 AppComponent 的构造函数中,我们有一个函数可以加载一些变量并将它们设置在 environment.ts 文件中。但是我们的测试失败了,因为它使用了这些变量并单独运行并且它没有加载设置它
您好,可以在我的 AppComponent 中添加测试模块吗? 下面是我对 appComponent 的真实表示 @Singleton @Component(modules = arrayOf(Mai
在构造函数中添加表单生成器时。我一直收到错误。我已经在 app.module 中添加了 ReactiveFormsModule。 import { Component } from '@angular
在使用 CLI 生成 Angular 项目时,根组件 - AppComponent 没有 ngOnInit block ,但生成的每个其他组件都有一个 ngOnInit block 。在根组件中有一个
总结:我正在尝试将 Angular2 AoT 用于我的 Angular2 应用程序,但由于我有静态提供程序将一些值从服务器传递到 Angular2,ngc 显示了一些错误.我的问题是如何获取使用 ng
我是一名优秀的程序员,十分优秀!