我需要在我的Windows Phone 8+应用程序中共享自定义对象的词典。 字典是在调用Rest Web服务后在启动时创建的,它不会被更新,它必须在某个页面上被数据绑定,并从其他页面进行询问。
我想过在App.xaml.cs上实例化一个包含Dictionary的单例类或者直接实现Dictionary。
是否有更高效/更实用的策略?
答案 0 :(得分:0)
我相信Singleton Pattern最适合您的情况。
public sealed class MyDictionary<TKey,TValue>
{
private static volatile Dictionary<TKey, TValue> instance;
private static object syncRoot = new object();
public static Dictionary<TKey, TValue> Instance
{
get
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Dictionary<TKey, TValue>();
}
}
return instance;
}
}
}
然后你会在你的代码中使用它,如:
MyDictionary<string, int>.Instance.Add("one", 1);
请注意,如果你的电话很乱,你可以(并且会)创建多个词典:
MyDictionary<string, int>.Instance.Add("one", 1);
MyDictionary<string, string>.Instance.Add("one", "apple");
Console.WriteLine(MyDictionary<string, int>.Instance["one"]);
Console.WriteLine(MyDictionary<string, string>.Instance["one"]);
产生
1
apple
因为第二个添加(和第二个写字)是与第一个不同的字典。
答案 1 :(得分:0)
如果您使用MVVM,则为另一种解决方案。 使用返回字典的属性创建服务类。 该类还有一个方法Initialize(或DownloadData)来填充字典,在app start上调用它。
使用IOC(使用MVVM Light,您将拥有SimpleIOC)来定义您的Service类的实例,大多数IOC将始终返回&#39; one&#39;实例化版本,换句话说单身。