Глобальная переменная не зависит от сессии - PullRequest
0 голосов
/ 01 октября 2018

Есть ли способ иметь глобальную переменную, которая не зависит от сеанса?Я хочу получить список всех подключений SignalR и идентификатор пользователя из БД.

Пока у меня есть что-то вроде этого:

public class SignalRUsersService : ISignalRUsersService
{
    private int userId;
    private readonly IHttpContextAccessor _accessor;
    public List<ConnectedSignalR> SignalRUsers;
    public SignalRUsersService( IHttpContextAccessor accessor)
    {
        _accessor = accessor;
        try
        {
            userId = Convert.ToInt32(_accessor.HttpContext.Session.GetString("uID"));
        }
        catch
        {
            userId = 0;
        }
        SignalRUsers = new List<ConnectedSignalR>();
    }


    public void AddSignalRUser(string ConnID)
    {
        SignalRUsers.Add(new ConnectedSignalR()
        {
            ConnID = ConnID,
            UserID = userId
        });
    }
    public void RemoveSignalRUser(string ConnID)
    {
        var usr = SignalRUsers.Where(a => a.ConnID == ConnID).FirstOrDefault();
        if (usr != null)
        {
            SignalRUsers.Remove(usr);
        }
    }
    public List<ConnectedSignalR> GetSignalRUsers()
    {
        return SignalRUsers;
    }
}

Проблема в том, что каждый раз, когда я используюинтерфейс, кажется, он повторно инициализирует мой список SignalRUsers.И даже если я нажимаю на данные в списке, я нахожу их пустыми, когда мне это нужно.

Зависит ли сеанс SignalRUsers?Или это просто вопрос неправильного использования интерфейса?

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 01 октября 2018

Концентраторы SignalR являются временными, что означает, что при получении вызова метода от клиента создается новый экземпляр (см .: https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-server).

. Вероятно, вы внедряете эту службу в класс концентратора, что означает, что выможно использовать конфигурацию внедрения зависимостей для управления временем жизни вашего класса обслуживания.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ISignalRUsersService, SignalRUsersService>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...