public async Task <WxMessage> Handle(IWxMessage message) { var reply = new WxReply_Text() { ToUserName = ((WxMessage)message).FromUserName, FromUserName = ((WxMessage)message).ToUserName, Content = "The MsgType of WxEvent_Scancode_push was successfully handled." }; return(await Task.FromResult(reply)); }
public async Task <WxMessage> Handle(IWxMessage message) { var reply = new WxReply_Text() { ToUserName = ((WxMessage)message).FromUserName, FromUserName = ((WxMessage)message).ToUserName, Content = "The MsgType is unknown." }; return(await Task.FromResult(reply)); }
public async Task <string> ReplyErrorMessage(WxMessage message) { var reply = new WxReply_Text() { ToUserName = message.FromUserName, FromUserName = _option.WxName, CreateTime = message.CreateTime, Content = "非常抱歉,我们无法识别您的消息。请检查后重新发送。" }; return(await Task.FromResult(new WxSerializer_SimpleXml().Serialize(reply))); }
public async Task <WxMessage> HandleMessage <TMessage>(TMessage message) where TMessage : IWxMessage { //_logger.LogInformation("=====MsgType===== " + message.GetType()); //_logger.LogInformation("=====MsgType===== " + typeof( TMessage)); //Frank: 这个方法来自于StackOverflow的回答 var messageType = message.GetType(); var messageHandlerType = typeof(IWxMessageHandler <>).MakeGenericType(messageType); //这是自己通过dynamic的方式的解决方法,但是并非最理想: dynamic dyna = _provider.GetService(messageHandlerType); _logger.LogInformation($"===信息处理方式: ==={dyna.GetType()}"); var handlingstxnResult = dyna.Handle(message); return(handlingstxnResult.Result); //Frank: 这是IEnumerable方案来实现查找WxMessage对应的Handler的方法。未采用。 /* * var _handlers = _provider.GetServices<IWxMessageHandler<TMessage>>(); * //_logger.LogInformation("=====is _hanlderfromprovider null?===== " + (_handlers == null)); * * var type = typeof(TMessage); * var _handler = _handlers * .Where(h => h.HandlingType.Equals(message.GetType())) * .FirstOrDefault(); * var handlingResult = _handler.Handle(message); * return await handlingResult; */ var reply = new WxReply_Text() { ToUserName = ((WxMessage)(object)message).FromUserName, FromUserName = ((WxMessage)(object)message).ToUserName, Content = ((WxMessage)(object)message).MsgType }; return(await Task.FromResult(reply)); }