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

C# 在Windows Phone 8+应用程序中共享自定义词典的最佳策略,c#,windows-phone-8,windows-phone,windows-phone-8.1,C#,Windows Phone 8,Windows Phone,Windows Phone 8.1,我需要在我的Windows Phone 8+应用程序中共享自定义对象的字典。 字典是在调用Rest Web服务后在启动时创建的,它不会被更新,它必须在某个页面上绑定数据,并从其他页面进行查询 我考虑在App.xaml.cs上实例化一个包含字典或直接包含字典的单例类 是否有更有效/更实用的策略?我相信最适合您的情况 public sealed class MyDictionary<TKey,TValue> { private static volatile Dictionary

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

我考虑在App.xaml.cs上实例化一个包含字典或直接包含字典的单例类

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

我相信最适合您的情况

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;
        }
    }
}

因为第二个add和第二个writeline与第一个不同。

如果使用MVVM,另一个解决方案。 使用返回字典的属性创建服务类。 该类还有一个方法Initialize或DownloadData来填充字典,在appstart上调用它

与使用带有MVVM灯的IOC相比,您将使用SimpleIOC来定义服务类的实例,大多数IOC将始终返回“一个”实例化版本,换句话说,单例

        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