我有 2 个改造客户端,其中一个是默认的,第二个有不同的实现,如(基本 URL、拦截器等...)
我需要在不使用名称引用的情况下注入默认客户端
第一个客户:-
single<Retrofit> {
Retrofit.Builder()
.baseUrl(RemoteConstants.BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(APIResponseConverter())
.addConverterFactory(GsonConverterFactory.create(get()))
.client(get())
.build()
}
Run Code Online (Sandbox Code Playgroud)
第二个客户:-
single<Retrofit>("retrofit_second") {
Retrofit.Builder()
.baseUrl("diffrent url")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(get()))
.client(get("SecondOkHttpClient"))
.build()
}
Run Code Online (Sandbox Code Playgroud)
我的注射方式
val myModule = module {
factory { get<Retrofit>().create(FirstAPI::class.java) } // Why Koin did not figure it without providing its default name !?
factory { get<Retrofit>("retrofit_second").create(SecondAPI::class.java) }
factory<IMyRemoteDataSource> { MyRemoteDataSource(get(), get()) }
factory<IMyRepository> { MyRepository(get()) }
factory { MyUseCase(get()) }
}
Run Code Online (Sandbox Code Playgroud)
结果是:
Multiple definitions found for type 'class retrofit2.Retrofit' - Koin can't choose …Run Code Online (Sandbox Code Playgroud) 我想为使用 appcompat 的应用程序制作运行时覆盖,但我无法让它工作。
\n我按照这个例子
\n首先:\n我创建了我想要覆盖的 Android 应用程序。我正在尝试将文本视图“Hello World”中的字符串覆盖为“Hello World override!”
\n应用程序代码快照
\n主要活动:
\nclass MainActivity : AppCompatActivity() {\n override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n setContentView(R.layout.activity_main)\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n主要活动布局:
\n<?xml version="1.0" encoding="utf-8"?>\n<FrameLayout\n\xc2\xa0xmlns:android="http://schemas.android.com/apk/res/android"\n\xc2\xa0xmlns:app="http://schemas.android.com/apk/res-auto"\n\xc2\xa0xmlns:tools="http://schemas.android.com/tools"\n\xc2\xa0android:layout_width="match_parent"\n\xc2\xa0android:layout_height="match_parent"\n\xc2\xa0tools:context=".MainActivity">\n\n\xc2\xa0<TextView\n\xc2\xa0android:layout_width="wrap_content"\n\xc2\xa0android:layout_height="wrap_content"\n\xc2\xa0android:text="@string/hello_world"\n\xc2\xa0/>\n\n</FrameLayout>\nRun Code Online (Sandbox Code Playgroud)\n显现:
\n<?xml version="1.0" encoding="utf-8"?>\n<manifest xmlns:android="http://schemas.android.com/apk/res/android"\n\xc2\xa0xmlns:tools="http://schemas.android.com/tools"\n\xc2\xa0package="com.example.app">\n\n\xc2\xa0<application\n\xc2\xa0 \xc2\xa0 \xc2\xa0android:allowBackup="true"\n\xc2\xa0 \xc2\xa0 \xc2\xa0android:icon="@mipmap/ic_launcher"\n\xc2\xa0 \xc2\xa0 \xc2\xa0android:label="@string/app_name"\n\xc2\xa0 \xc2\xa0 \xc2\xa0android:roundIcon="@mipmap/ic_launcher_round"\n android:theme="@style/MyTheme"\n\xc2\xa0 \xc2\xa0 \xc2\xa0android:supportsRtl="true">\n\xc2\xa0 \xc2\xa0 \xc2\xa0<activity android:name=".MainActivity">\n\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0<intent-filter>\n\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0<action android:name="android.intent.action.MAIN"/>\n\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0<category android:name="android.intent.category.LAUNCHER"/>\n\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0</intent-filter>\n\xc2\xa0 \xc2\xa0 \xc2\xa0</activity>\n\xc2\xa0</application>\n\n</manifest>\nRun Code Online (Sandbox Code Playgroud)\n应用主题:
\n\n …Run Code Online (Sandbox Code Playgroud)