Данные о текущем пользователе не сохраняются в MemoryCache

Я создал UserSessionService для того, чтобы там хранить информацию о текущем пользователе через MemoryCache. Зарегистрировал его, как Singleton в DI.

public class UserSessionService: IUserSessionService
{
private readonly IMemoryCache _memoryCache;

public UserSessionService(IMemoryCache memoryCache)
{
    _memoryCache = memoryCache;
}

public void SetUserData(string key, object value, TimeSpan? absoluteExpirationRelativeToNow = null)
{
    var cacheEntryOptions = new MemoryCacheEntryOptions
    {
        AbsoluteExpirationRelativeToNow = absoluteExpirationRelativeToNow ?? TimeSpan.FromHours(1)
    };
    
    _memoryCache.Set(key, value, cacheEntryOptions);
}

public T GetUserData<T>(string key)
{
    if (_memoryCache.TryGetValue(key, out T value))
    {
        return value;
    }
    else
    {
        return default;
    }
}
}


public static IHostBuilder CreateHostBuilder(string[] Args)
    {
        var host = Host.CreateDefaultBuilder(Args)
                  .ConfigureServices((context, services) =>
                  {
                      services.AddDbContext<CandyKeeperDbContext>(options =>
                      {
                          options.UseSqlServer(context.Configuration.GetConnectionString("DefaultConnection"));
                      }, ServiceLifetime.Singleton);
                      services.AddMemoryCache();
                      services.AddRepositories();
                      services.AddServices();
                      services.AddViewModels();
                      services.EnsureRolesExist(context.Configuration.GetConnectionString("DefaultConnection")!, roleNames);
                  });
        
        return host;
    }

Когда пользователь авторизуется, то я добавляю данные в MemoryCache

public async void OnLoginCommandExecuted(object p)
{
    await _semaphore.WaitAsync();
    try
    {
        var user = await _accountService.Login(_currentUser.Name, _currentUser.PasswordHashed);

        if (user == null)
            throw new Exception("user null");
        
        CurrentUser = new User
        {
            Id = user.Id,
            Name = user.Name,
            PasswordHashed = user.PasswordHashed,
            PrincipalId = user.PrincipalId,
            StoreId = user.StoreId,
            IsBlocked = user.IsBlocked
        };

        if (CurrentUser.IsBlocked)
            throw new MemberAccessException();
        
        _userSessionService.SetUserData("CurrentUser", CurrentUser, TimeSpan.FromHours(1));
        
        MainWindow window = new MainWindow();
        _showMainEvent?.Invoke(null, CurrentUser);
        window.Show();
        
    }
    catch (MemberAccessException ex)
    {
        IsBlockedAccount = true;
        CurrentUser = new();
    }
    catch (Exception ex)
    {
        IsInvalidCredentials = true;
        CurrentUser = new();
    }
    finally
    {
        _semaphore.Release();
    }
}

Потом, когда я перехожу на вкладку с продукцией, в ProductForSaleViewModel я по идее должен получить тот же самый экземпляр UserSessionService с добавленной информацией о текущем пользователе в MemoryCache, но он пустой(Count 0)

public ProductForSaleViewModel(IProductForSaleService service,
        IProductService productService,
        IStoreService storeService,
        IProductDeliveryService productDeliveryService,
        IPackagingService packagingService,
        IConfiguration configuration,
        IUserService userService,
        IUserSessionService userSessionService)
    {
        //инициализация сервисов
        _userSessionService = userSessionService;
        _configuration = configuration;

        
        CurrentUser = _userSessionService.GetUserData<User>("CurrentUser");
        //Регистрация команд 
        
        _productForSales = new ObservableCollection<ProductForSale>();
        _roles = GetDatabaseRoles();
        OnGetCommandExecuted(null);
    }

Ответы (0 шт):