在Windows Phone 8+应用程序中共享自定义词典的最佳策略

时间:2014-09-19 23:48:43

标签: c# windows-phone-8 windows-phone windows-phone-8.1

我需要在我的Windows Phone 8+应用程序中共享自定义对象的词典。 字典是在调用Rest Web服务后在启动时创建的,它不会被更新,它必须在某个页面上被数据绑定,并从其他页面进行询问。

我想过在App.xaml.cs上实例化一个包含Dictionary的单例类或者直接实现Dictionary。

是否有更高效/更实用的策略?

2 个答案:

答案 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;实例化版本,换句话说单身。