如何访问我只需要在 Application.Start 上创建一次的变量

本文关键字:创建 Start 一次 Application 变量 访问 何访问 | 更新日期: 2023-09-27 18:02:10

根据本指南:https://github.com/mspnp/azure-guidance/blob/master/Retry-Service-Specific.md

他们说:

请注意,StackExchange.Redis 客户端通过单个连接使用多路复用。建议的用法是在应用程序启动时创建客户端的实例,并将此实例用于针对缓存的所有操作。因此,与缓存的连接仅建立一次,因此本节中的所有指导都与此初始连接的重试策略相关,而不是与访问缓存的每个操作相关。

现在我有这样的东西:

public static Models.UserProfile GetUserProfile(string identityname)
        {
            /// It needs to be cached for every user because every user can have different modules enabled.
            try
            {
                var cachekeyname = "UserProfileInformation|" + identityname;
                IDatabase cache = CacheConnectionHelper.Connection.GetDatabase();
                Models.UserProfile userProfile = new Models.UserProfile();
                object obj = cache.Get(cachekeyname);

我可以将连接线移动到 global.asax

protected void Application_Start()
        {
            IDatabase cache = CacheConnectionHelper.Connection.GetDatabase();
        }

如果我移动该行,那么如何在需要使用它的其他方法上获取该实例?

这是缓存连接帮助程序

public class CacheConnectionHelper
    {
        private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
        {
            return ConnectionMultiplexer.Connect(SettingsHelper.AzureRedisCache);
        });
        public static ConnectionMultiplexer Connection
        {
            get
            {
                return lazyConnection.Value;
            }
        }
    }

如何访问我只需要在 Application.Start 上创建一次的变量

您可以在 global.asax 文件中将其设置为静态

public class Global : HttpApplication {
    public static IDatabase Cache = CacheConnectionHelper.Connection.GetDatabase();
    void Application_Start(object sender, EventArgs e) {
    }
    .....
}

现在,您只需访问数据库的单个实例Global.Cache即可访问任何类中的数据库对象。