在启动并从文件加载信息后,如何创建一个可在所有 MVC 和 WEB API 中访问的全局对象

How can I create a global object that is accessible in all the MVC & WEB API after it start and load information from file

我有一个 class,它有一个字典正在从本地 XML 从 App_Data 加载。我应该在哪里添加 class 以使其对我的应用程序中的所有控制器全局可见?我只是认为行为像一个单身人士。如果在 global.asax

中添加一个好的选项

Class 例子

  public class OptionsNames
        {
            private Dictionary<int, string> names;

            public OptionsNames()
            {

                names = new Dictionary<int, string>();

                names= LoadOptionsFromXML();

            }

            public string GetNameById(int id)
            {
                if (names.ContainsKey(id))
                     return names[id];

                return string.Empty;
            }
        }

听起来您只想要一个 static 对象:

public static class OptionsNames
{
    private static Dictionary<int, string> names;

    static OptionsNames()
    {
        names = new Dictionary<int, string>();
        names = LoadOptionsFromXML();
    }

    public static string GetNameById(int id)
    {
        if (names.ContainsKey(id))
             return names[id];
        return string.Empty;
    }

    // other class members
}

静态 class 位于何处并不重要,可以从任何地方引用它。只需确保它位于直观的 location/namespace.

使用代码将直接调用它而无需创建实例:

var name = OptionsNames.GetNameById(someIdValue);

这是一个延迟加载的单例示例

public class OptionsNames
{
    private static Dictionary<int, string> names;

    private static readonly Lazy<OptionsNames> LazyInstance = new Lazy<OptionsNames>(() => new OptionsNames());

    protected OptionsNames()
    {
        names = new Dictionary<int, string>();

        names = LoadOptionsFromXML();
    }

    public static OptionsNames Instance
    {
        get { return LazyInstance.Value; }
    }

    public static string GetNameById(int id)
    {
        if (names.ContainsKey(id))
             return names[id];
        return string.Empty;
    }        
}

而且你不需要在global.asax中做任何事情,只需要这样调用

var name = OptionsNames.Instance.GetNameById(someIdValue);

就是这样。