问题描述
我有一个应用,在域、数据和表示层之间有明确的区别。我有我的数据模型,它是从我的服务器获取的,它被转换为域模型,并被传递到用于绑定等的演示文稿。我一直在尝试本地化我的项目。我有发布帖子时读取的文本。例如。 “1 小时前”、“片刻前”...
我想本地化并翻译它,但我无法从没有上下文的数据类中访问字符串 res。而且我想避免到处传递上下文。这通常是如何处理的?这似乎是 public static int solutions(int num) {
if (num <3 || num > 30)
return 0;
return solutions(num,1,1);
}
public static int solutions(int num,int x1,int x2,int x3) {
if (x1 > 10 || x2 > 10 || x3 > 10)
return 0;
int count,val1,val2,val3;
if (x1 + x2 + x3 == num) {
System.out.println(x1+" + "+x2+" + "+x3);
count = 1;
} else
count = 0;
val1 = solutions(num,x1+1,x2,x3);
val2 = solutions(num,x1,x2+1,x3);
val3 = solutions(num,x3+1);
return count + val1 + val2 + val3;
}
的一个非常常见的用例,但似乎我错了。
解决方法
getResources() 是抽象 Context
类的方法。 Activity
只是继承了它,这意味着您实际上并不需要对 Activity
的引用来获取包资源。应用上下文就足够了。
至于在数据层中使用 Context
,您可以创建一个实例(更好的单例),我们称之为 ResourceProvider
,传入应用程序上下文。例如,
interface ResourceProvider {
fun getString(@StringRes id: Int): String
}
class ResourceProviderImpl constructor(private val context: Context) : ResourceProvider {
override fun getString(id: Int): String = context.getString(id)
}
只需确保将 applicationContext 传递给 ResourceProviderImpl
的构造函数,以避免生命周期短于应用程序的上下文的内存泄漏。