public void Dispose() { CacheLock.Dispose(); foreach (var item in fCaches.Values) { item.DisposeObject(); } fCaches.Clear(); }
/// <summary> /// After cache access /// </summary> /// <param name="args">Callback parameters from MSAL</param> internal void AfterAccessNotification(TokenCacheNotificationArgs args) { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"After access"); try { // if the access operation resulted in a cache update if (args.HasStateChanged) { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"After access, cache in memory HasChanged"); try { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"Before Write Store"); byte[] data = args.TokenCache.SerializeMsalV3(); _cachedStoreData = data; _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"Serializing '{data.Length}' bytes"); _store.WriteData(data); try { // The _store.LastVersionToken is written when we call _store.ReadData, but we know that we're // up-to-date here, so read the actual version from the file, so we can skip deserializing next time. var versionToken = File.ReadAllText(_store.VersionFilePath); _registeredCaches[args.TokenCache] = versionToken; } catch (IOException ex) { _logger.TraceEvent(TraceEventType.Warning, /*id*/ 0, $"MsalCacheHelper: Unable to read version file due to exception: '{ex.Message}'"); } _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"After write store"); } catch (Exception e) { _logger.TraceEvent(TraceEventType.Error, /*id*/ 0, $"An exception was encountered while serializing the {nameof(MsalCacheHelper)} : {e}"); _logger.TraceEvent(TraceEventType.Error, /*id*/ 0, $"No data found in the store, clearing the cache in memory."); // The cache is corrupt clear it out Clear(); throw; } } } finally { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"Releasing lock"); CacheLock?.Dispose(); CacheLock = null; } }
/// <summary> /// After cache access /// </summary> /// <param name="args">Callback parameters from MSAL</param> internal void AfterAccessNotification(TokenCacheNotificationArgs args) { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"After access"); try { // if the access operation resulted in a cache update if (args.HasStateChanged) { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"After access, cache in memory HasChanged"); try { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"Before Write Store"); byte[] data = args.TokenCache.SerializeMsalV3(); _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"Serializing '{data.Length}' bytes"); _store.WriteData(data); _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"After write store"); } catch (Exception e) { _logger.TraceEvent(TraceEventType.Error, /*id*/ 0, $"An exception was encountered while serializing the {nameof(MsalCacheHelper)} : {e}"); _logger.TraceEvent(TraceEventType.Error, /*id*/ 0, $"No data found in the store, clearing the cache in memory."); // The cache is corrupt clear it out Clear(); throw; } } } finally { _logger.TraceEvent(TraceEventType.Information, /*id*/ 0, $"Releasing lock"); CacheLock?.Dispose(); CacheLock = null; } }