Exemplo n.º 1
0
        public override Task Invoke(IOutgoingPhysicalMessageContext context, Func <Task> next)
        {
            var messageTypeKey = "NServiceBus.EnclosedMessageTypes";

            //var headers = context.Headers;
            if (!context.Headers.TryGetValue(messageTypeKey, out var messageType))
            {
                return(next());
            }

            if (messageType.IndexOf(';') != -1)
            {
                messageType = messageType.Substring(0, messageType.IndexOf(';'));
            }

            // Don't use context.Message.Instance because it will be IEvent_impl
            var type = Type.GetType(messageType, false);

            if (type == null)
            {
                Logger.WarnEvent("UnknownType", "{MessageType} sent - but could not load type?", messageType);
                return(next());
            }
            if (!type.IsInterface)
            {
                type = _mapper.GetMappedTypeFor(type) ?? type;
            }

            var definition = _registrar.GetVersionedName(type);

            if (definition == null)
            {
                Logger.WarnEvent("UnknownMessage", "{MessageType} has no known definition", type.FullName);
                return(next());
            }

            context.Headers[messageTypeKey] = definition;

            return(next());
        }