首页 > 解决方案 > 如何拥有一个单例类并在整个应用程序中使用它 c#

问题描述

我有一个反序列化 JSON 文件的类。JSON 是 styleconfig.json

    {  
        "Style1": {  
            "Font":       "Arial",   
            "width":      "25px",   
            "className":    "Grid-side"
        }  ,
"Style2": {  
            "Font":       "Arial",   
            "width":      "25px",   
            "className":    "Grid-side"
        }  
    }  

我有一个A类:

 var jss = new JavaScriptSerializer();
string json = new StreamReader(context.Request.InputStream).ReadToEnd();
Dictionary<string, string> sData = jss.Deserialize<Dictionary<string, string>>(json);

所以我每次都需要在我的应用程序中调用这个classA 例如有两个页面...Page1和page2两个样式变量都在json上所以每次我需要调用classA来反序列化

  1. page1 调用 classA 进行反序列化
  2. page2调用classA反序列化

所以这可能会影响性能。最终,整个应用程序的 JSON 文件是相同的

所以我的要求是只在我登录应用程序时运行一次 classA 并在整个应用程序中创建反序列化 JSON 对象。我需要一些帮助

标签: c#jsonserializationsingletonglobal

解决方案


您可以使用静态类执行此操作,并使用 Lazy<> 确保它只加载一次:

public static class A
{
    private static Lazy<Dictionary<string, string>> _data = new Lazy<Dictionary<string, string>>(() => GetData());

    public static Dictionary<string, string> Data => _data.Value;

    private static Dictionary<string, string> GetData()
    {
        var jss = new JavaScriptSerializer();
        string json = new StreamReader(context.Request.InputStream).ReadToEnd();
        return jss.Deserialize<Dictionary<string, string>>(json);
    }
}

推荐阅读