我在Xamarin开始,我被卡住了。
我有3个不同的页面,如何与所有这些页面共享一个类实例?
例如:
//I have this class instance in the first page
Person p = new Person("Jack");
//And I'd like to get the content in all pages
string name = p.getName();
我们可以不在参数中传递实例吗?
由于
答案 0 :(得分:6)
最简单的方法是从Xamarin.Forms
Application
类/实例中分配和访问它:
public class App : Application
{
public MySharedClass MySharedObject;
~~~
}
然后,您可以从其他任何页面访问当前的Application
:
var obj = (Application.Current as App).MySharedObject;
答案 1 :(得分:4)
我通常创建一个服务,为客户端返回一个值/实例(即pages / viewmodels)。
我通常将此服务作为构造函数参数注入所有需要该值的页面或视图模型。
因此,有一些仪式涉及我所确定的策略。然而,优点是我描述的技术是可单元测试的。因此,编写经过验证的(又名:可测试的)代码可以节省时间。
请注意,向App类添加属性既快又脏。但是,它不适合可测试性。因此,单元测试不应该要求启动整个应用程序实例来验证业务逻辑片段。
另一种选择是在您的页面/视图模型中插入字典。您的词典甚至可以是静态的,以避免您的应用程序逻辑中的仪式但是,如果在每次测试运行后都没有清除字典,这将影响单元测试。
总之,我建议创建一个任意服务或字典。 请注意,如果您使用静态声明的字典,那么您的单元测试必须清除拆解阶段的字典,否则您的其他测试将受到以前运行测试的副作用的影响。