コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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)));
        }
コード例 #4
0
        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));
        }