将上下文作为存储库中的主要构造函数参数是好是坏

Having context as primary constructor parameter inside a repository is good or bad

我有一个名为 LocationRepository 的存储库 LocationRepository 的代码是

class LocationRepository(
       private val context: Context
       private val api: AppApi, 
       private val db:AppDatabase
) : SafeApiRequest() {
}

在这里你可以看到我正在通过主构造函数在内部传递一个上下文,因为我必须将位图从它的 Uri 转换为 base64 你可以在下面看到暂停的乐趣

suspend fun submitLocation(location: Location,employee: Employee) : LocationUpdateResponse{
}

你可以在这里看到我正在传递包含图像 Uri 的位置 我必须在 API 调用之前将 Uri 转换为 base64,这是最佳做法还是不好?

这既不是最佳做法也不是坏事。有时需要上下文,尤其是当您需要它来访问数据库、共享首选项或获取某些资源时。

如果您需要将上下文存在于您的存储库中,则需要确保您使用的是应用程序上下文。如果您正在使用 activity 的上下文,那么当活动消失但存储库没有消失时,您将泄漏您的活动。

两者 Activity and Application 上下文在他们提供的内容上非常相似。区别在于 Activity 上下文与 activity 的生命周期相关联,而应用程序上下文与应用程序生命周期相关联。

现在,由于应用程序的生命周期与您的存储库一样长,因此可以在您的存储库中使用应用程序上下文。