Class Message App Service不能具有ABP .NET Core 3.1框架的多个基类'Hub'和'AsyncCrudAppService'

问题描述 投票:0回答:1

我正在尝试将SignalR聊天记录保存到数据库,但是问题是当我想为AsyncCrudAppService创建一个类,并且发生以下文本时发生Hub错误:Class Message App Service不能具有多个基类'Hub'和'AsyncCrudAppService'

这是我的代码:

namespace MyProject.ChatAppService
{
    public class MessageAppService: Hub,AsyncCrudAppService<Message, MessageDto, int, PagedAndSortedResultRequestDto, CreateMessageDto, UpdateMessageDto, ReadMessageDto>
    {
        private readonly IRepository<Message> _repository;

        private readonly IDbContextProvider<MyProjectDbContext> _dbContextProvider;
        private MyProjectPanelDbContext db => _dbContextProvider.GetDbContext();
        public MessageAppService(IDbContextProvider<MyProjectDbContext> dbContextProvider,IRepository<Message> repository) :base(repository)
        {
            _repository = repository;
            _dbContextProvider = dbContextProvider;

        }

        public  List<Dictionary<long, Tuple<string, string>>> InboxChat()
        {
            //the result will be list<userid, Tuple<username ,  latest message> >();


            List<Dictionary<long, Tuple<string, string>>> result = new List<Dictionary<long, Tuple<string, string>>>();

            List<User> listOflAllUsers=db.Set<User>().ToList();

            listOflAllUsers.ForEach((user) =>
            {
                try
                {
                    var dict = new Dictionary<long, Tuple<string, string>>();

                var latestMessage = (from msg in db.Set<Message>() select msg).Where(msg => msg.CreatorUserId == user.Id && msg.receiverID == AbpSession.UserId).OrderByDescending(x => x.CreationTime).FirstOrDefault().Text.ToString();

                dict.Add(user.Id, Tuple.Create(user.UserName, latestMessage));
                result.Add(dict);
                }
                catch (Exception ex)
                {
                     new UserFriendlyException(ex.Message.ToString());
                }

            });


            return result;
        }



        public List<Message> getMessageHistory(int senderId)
        {
            return _repository.GetAll().Where(x => x.CreatorUserId == senderId && x.receiverID == AbpSession.UserId ).ToList();
        }




    }
}

如何避免这个错误?

更新:

这里是MyChatHub代码,我想在它和AsyncCrudAppService类之间进行组合以成为一个类(我不知道这种方式是否正确,但这是我想到的!)。

public class MyChatHub : Hub, ITransientDependency
    {
         public IAbpSession AbpSession { get; set; }

    public ILogger Logger { get; set; }

    public MyChatHub()
    {
        AbpSession = NullAbpSession.Instance;
        Logger = NullLogger.Instance;
    }

    public async Task SendMessage(string message)
    {
        await Clients.All.SendAsync("getMessage", string.Format("User {0}: {1}", AbpSession.UserId, "the message that has been sent from client is "+message));
    }
        public async Task ReceiveMessage(string msg, long userId)
        {
            if (this.Clients != null)
            {
                await Clients.User(userId.ToString()).SendAsync("ReceiveMessage", msg, "From Server by userID ", Context.ConnectionId, Clock.Now);
            }
            else
            {
                throw new UserFriendlyException("something wrong");
            }
        }


        public override async Task OnConnectedAsync()
    {
        await base.OnConnectedAsync();
        Logger.Debug("A client connected to MyChatHub: " + Context.ConnectionId);
    }

    public override async Task OnDisconnectedAsync(Exception exception)
    {
        await base.OnDisconnectedAsync(exception);
        Logger.Debug("A client disconnected from MyChatHub: " + Context.ConnectionId);
    }


    }

signalr aspnetboilerplate .net-core-3.1 asp.net-boilerplate
1个回答
0
投票

您的AsyncCrudAppService子类不能也不应继承Hub

相反,注入并使用类似于ABP的IHubContext<MyChatHub>SignalRRealTimeNotifier

SignalRRealTimeNotifier

要向所有客户端发送消息,请致电public MessageAppService( IHubContext<MyChatHub> hubContext, IDbContextProvider<MyProjectDbContext> dbContextProvider, IRepository<Message> repository) : base(repository) { _dbContextProvider = dbContextProvider; _hubContext = hubContext; _repository = repository; }

参考:

© www.soinside.com 2019 - 2024. All rights reserved.