AccessTokenRefresher LookupAccessTokenRefresher() { if (_tokenRefresher != null) { return(_tokenRefresher); } var resourceName = ResourceName?.Render(LogEventInfo.CreateNullEvent()); if (string.IsNullOrEmpty(resourceName)) { InternalLogger.Warn("AccessToken LayoutRenderer - Missing ResourceName"); return(null); } var tenantId = TenantId?.Render(LogEventInfo.CreateNullEvent()); if (string.IsNullOrWhiteSpace(tenantId)) { tenantId = null; } var connectionString = ConnectionString?.Render(LogEventInfo.CreateNullEvent()); var azureAdInstance = AzureAdInstance?.Render(LogEventInfo.CreateNullEvent()); var tokenProviderKey = new TokenProviderKey(resourceName, tenantId, connectionString, azureAdInstance); AccessTokenRefresher tokenRefresher = null; if (!AccessTokenProviders.TryGetValue(tokenProviderKey, out var tokenProvider) || !tokenProvider.TryGetTarget(out tokenRefresher)) { var serviceProvider = _tokenProviderFactory(connectionString, azureAdInstance); lock (AccessTokenProviders) { if (_tokenRefresher == null) { if (!AccessTokenProviders.TryGetValue(tokenProviderKey, out tokenProvider) || !tokenProvider.TryGetTarget(out tokenRefresher)) { tokenRefresher = new AccessTokenRefresher(serviceProvider, resourceName, tenantId); AccessTokenProviders[tokenProviderKey] = new WeakReference <AccessTokenRefresher>(tokenRefresher); } } } } if (Interlocked.CompareExchange(ref _tokenRefresher, tokenRefresher, null) == null) { _tokenRefresher.AccessTokenRefreshed += AccessTokenRefreshed; } return(_tokenRefresher); }