Skip to main content

Cannot access a disposed object. A common cause of this error is disposing a context that was

 Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling Dispose() on the context, or wrapping the context in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances. Object name: 'PropertyContext'.



 public class CustomerHub : Hub

    {

        public readonly ICustomerService _customerService;

        private readonly IServiceScopeFactory _serviceScopeFactory;

        public CustomerHub(ICustomerService service, IServiceScopeFactory serviceScopeFactory)

        {

            _customerService = service;

            _serviceScopeFactory = serviceScopeFactory;

        }


     


        public async Task<string> RegisterToOPLogon(string clientName)

        {

            string clientID = Context.ConnectionId;

            ClientInfo.Clients.Add(new AppClient(clientID, clientName));


            BusinessUpdateGenerator.DoJob(Context.ConnectionId,_serviceScopeFactory);


            return "Successfully Registered.";

        }


        public override Task OnDisconnectedAsync(Exception exception)

        {

            string connectionId = Context.ConnectionId;

            ClientInfo.Clients.Remove(ClientInfo.Clients.Where(c => c.Id == connectionId).FirstOrDefault());

            return base.OnDisconnectedAsync(exception);

        }


        public static void NotifyUpdates(string message, string clientName,string connectionId)

        {

            _hubContext.Clients.Client(connectionId).SendAsync("ReceiveMessageOPLogOn", message);

        }


    }


    public static class BusinessUpdateGenerator

    {


        public static void DoJob(string connectionId, IServiceScopeFactory _serviceScopeFactory)

        {

            _ = Task.Delay(5000).ContinueWith(a =>

              {


                  using (var scope = _serviceScopeFactory.CreateScope())

                  {

                      var _customerService = scope.ServiceProvider.GetService<ICustomerService>();

                      var data =  _customerService.GetRoles().Result;

                  }


                  string clientName = ClientInfo.Clients.Where(c => c.Id == connectionId).FirstOrDefault()?.Name;

                  string message = $"This message is for [{clientName}] and his connection id is [{connectionId}]<br/>Now it is {DateTime.UtcNow.ToString()} O'Clock.";

                  CustomerHub.NotifyUpdates(message, clientName,connectionId);


                  DoJob(connectionId, _serviceScopeFactory);

              });

            

        }

    }


    public static class ClientInfo

    {

        public static List<AppClient> Clients = new List<AppClient>();

    }


    public class AppClient

    {

        public string Id { get; set; }

        public string Name { get; set; }

        public AppClient(string id, string name)

        {

            Id = id;

            Name = name;

        }

    }

Comments

Popular posts from this blog

ahara-nidra-bhaya-maithunam

आहर निद्रा भय मैथुनं च सामान्यमेतत पशुभिर्नराणाम् धर्मो हि तेषाम् अधिको विशेषो धर्मेण हीना पशुभिः समाना ahara-nidra-bhaya-maithunam ca samanyam etat pashubhih naranam dharmo hi tesham adhiko vishesho dharmena hina pashubhih samanah Hunger, sleep,fear and sexual desire are the instincts which are common between mankind and beasts (animals). .It is especially 'Dharma;' that mankind possesses additionally, and a person bereft of 'Dharma' is like a beast, “Eating, sleeping, fearing, and mating are the four principles of animal life. These are common both to animals and to human beings. But religion is the extra function of the human being. Without religion, human life is no better than animal life.” -from Mahabharata