Come accedere a una variabile che ho solo bisogno di creare una volta su Application.Start

1

Secondo questa guida: link

Dicono:

Si noti che il client StackExchange.Redis utilizza il multiplexing attraverso una singola connessione. L'utilizzo consigliato è creare un'istanza del client all'avvio dell'applicazione e utilizzare questa istanza per tutte le operazioni sulla cache. Per questo motivo, la connessione alla cache viene eseguita una sola volta e quindi tutte le istruzioni in questa sezione sono correlate al criterio di retry per questa connessione iniziale e non per ogni operazione che accede alla cache.

In questo momento ho qualcosa di simile a questo:

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

Posso spostare la linea di connessione su global.asax

protected void Application_Start()
        {

            IDatabase cache = CacheConnectionHelper.Connection.GetDatabase();

        }

Se sposto quella linea, come posso ottenere quell'istanza sugli altri metodi in cui ho bisogno di usarla?

questo è l'helper della connessione cache

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

        public static ConnectionMultiplexer Connection
        {
            get
            {
                return lazyConnection.Value;
            }
        }
    }

Come non so molto dei pattern, forse questo è un singleton? ma non ho idea di come implementarlo!

    
posta Luis Valencia 09.07.2015 - 23:39
fonte

1 risposta

1

Se dichiari la variabile nel contesto locale di Application_Start () come nel tuo esempio, è accessibile solo con quel metodo.

Una soluzione potrebbe essere dichiarare la variabile come variabile globale, al di fuori della procedura "Application_Start ()".

Esempio:

public class Global : System.Web.HttpApplication {

  public static IDatabase DBCache;

  protected void Application_Start(object sender, EventArgs e) {
    DBCache = CacheConnectionHelper.Connection.GetDatabase();
  }
}

quindi puoi accedervi dalle altre classi chiamandolo in questo modo:

public class test {
  public myFunction() {    
    var mycache = Global.DBCache;
  }
}
    
risposta data 12.07.2015 - 13:36
fonte

Leggi altre domande sui tag