当前位置: 首页 > 知识库问答 >
问题:

无法使用柄依赖注入注入注入应用程序上下文

杜俊风
2023-03-14

这是模块类

@Module
@InstallIn(SingletonComponent::class)
object AppModule {


    @Provides
    fun getAppPreferences(
        @ApplicationContext context: ApplicationContext,
        @Named("appName") appName: String
    ):SharedPreferences {
        return (context as Context).getSharedPreferences(appName, Context.MODE_PRIVATE)
    }


    @Provides
    @Named("URL")
    fun getBaseUrl(): String {
        return AppConstants.BASE_URL
    }

    @Singleton
    @Provides
    fun getApiService(
        client: OkHttpClient, @Named("URL") baseURL: String,
        factory: GsonConverterFactory
    ): ApiInterface {

        return Retrofit.Builder()
            .baseUrl(baseURL)
            .addConverterFactory(factory)
            .client(client)
            .build()
            .create(ApiInterface::class.java)

    }

    @Singleton
    @Provides
    fun getClient(sharedPreferences: SharedPreferences): OkHttpClient {

        val interceptor = HttpLoggingInterceptor()
        interceptor.level = HttpLoggingInterceptor.Level.BODY
        return OkHttpClient().newBuilder()
            .addInterceptor(interceptor)
            .addInterceptor { chain ->
                val requestBuilder = chain.request().newBuilder()
                val token = ProjectUtil.getApiTokenBearer(sharedPreferences)
                token?.apply {
                    requestBuilder.addHeader("Authorization", token)
                }
                chain.proceed(requestBuilder.build())
            }
            .connectTimeout(100, TimeUnit.SECONDS)
            .writeTimeout(100, TimeUnit.SECONDS)
            .readTimeout(100, TimeUnit.SECONDS)
            .build()

    }

    @Singleton
    @Provides
    fun getConvertorFactory(): GsonConverterFactory {

        val gson = GsonBuilder()
            .setLenient()
            .create()
        return GsonConverterFactory.create(gson)

    }

    @Provides
    @Named("appName")
    fun getAppName() = "CarApplication"

}

这是我的viewmodel构造函数

@HiltViewModel
class HomeFragmentViewModel @Inject constructor(
    val sharedPreferences: SharedPreferences,
    private val apiService: ApiInterface
) : ViewModel() {

    private lateinit var createEquriumDialog: Dialog

    //    val progress_dialog = MyOwnProgressDialog(context)
    var showAquariumRv: MutableLiveData<Boolean> = MutableLiveData()
    var equariumList: ListUserAquariumResponse? = null
    val goToActivityIntent: MutableLiveData<Intent> = MutableLiveData()
    val progress: MutableLiveData<Boolean> = MutableLiveData()
    val showMessage: MutableLiveData<String> = MutableLiveData()
}

当我运行应用程序时,我得到这个错误,我认为不要在模块中注入所需的应用程序上下文,任何帮助都会被赞赏

C:\XYZ\XYZ\AndroidStudioProjects\CarAndroid\app\build\generate\source\kapt\debug\com\sw\car\baseclasses\CarApp_HiltComponents.java:128: 错误: [Dagger/MissingBinding] @dagger.hilt.android.限定符.applicationContextgger.hilt.android.限定符.ApplicationContext 如果没有@Provides注释的方法,则无法提供。公共抽象静态类 html" target="_blank">单例C实现DaluaApp_GeneratedInjector, ^ @dagger.hilt.android.限定符.应用程序上下文 dagger.hilt.android.限定符.应用程序上下文注入于com.sw.car.ui.home.fragments.home.HomeFragmentViewModel_HiltModules.BindsModule.binds(vm) @dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map

共有1个答案

周兴朝
2023-03-14

应该是@Application ationContext上下文:Context,

< code>ApplicationContext是一个注释

 类似资料:
  • 在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa

  • 依赖注入 Dependency Injection is a strong mechanism, which helps us easily manage dependencies of our classes. It is very popular pattern in strongly typed languages like C# and Java. 依赖注入是一个很强大的机制,该机制可以帮

  • 简介 Hyperf 默认采用 hyperf/di 作为框架的依赖注入管理容器,尽管从设计上我们允许您更换其它的依赖注入管理容器,但我们强烈不建议您更换该组件。 hyperf/di 是一个强大的用于管理类的依赖关系并完成自动注入的组件,与传统依赖注入容器的区别在于更符合长生命周期的应用使用、提供了 注解及注解注入 的支持、提供了无比强大的 AOP 面向切面编程 能力,这些能力及易用性作为 Hyper

  • 出自维基百科 Wikipedia: 依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。 这句解释让依赖注入的概念听起来比它实际要复杂很多。依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。

  • 主要内容:什么是依赖注入,value,factory,provider,constant,实例,AngularJS 实例 - factory,AngularJS 实例 - provider什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分。 该模式分离了客户端依赖本身行为的创建,这使得程序设计变得松耦

  • 我要的不是意见而是事实 我正在尝试选择一个新的DI。我有一些Guice的经验。总的来说,我想说它的一个优点是,当从scala需要与Java集成时,Guice可以完成这项工作。所以对于互操作性来说,这是一个明显的优势。 如果我们抛开这个互操作性问题不谈,谁能给我简单的比较一下 scaladi,guice,Macwire? 我对了解烫伤症还是新手。我发现令人惊讶的一件事是必须通过隐式参数在喷油器周围移