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

本文关键字:最佳 策略 自定义 共享 Phone Windows 应用程序 | 更新日期: 2023-09-27 18:23:51

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

我考虑过实例化一个包含Dictionary的singleton类,或者直接在App.xaml.cs.上实例化Dictionary

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

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

我相信Singleton模式最适合您的情况。

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

因为第二次添加(和第二次写入行)与第一次不同。

如果您使用MVVM,另一个解决方案。创建一个具有返回字典的属性的服务类。该类还有一个方法Initialize(或DownloadData)来填充字典,在应用程序启动时调用它。

使用IOC(使用MVVM Light,您将获得SimpleIOC)来定义Service类的实例,大多数IOC将始终返回"one"实例化版本,换句话说,singleton。