private void AddMessageTypePathMapping(MessageTypeMessagingEntityMappingDetails messageTypePathMappingDetails)
        {
            MessageTypeMessagingEntityMappingDetails existingMessageTypePathMapping = _messageTypePathMappings.FirstOrDefault(mtpm => mtpm.MessageType == messageTypePathMappingDetails.MessageType && mtpm.MessagingEntityType == messageTypePathMappingDetails.MessagingEntityType);

            if (existingMessageTypePathMapping != null)
            {
                throw new MappingAlreadyExistsForMessageTypeException(existingMessageTypePathMapping.MessageType, existingMessageTypePathMapping.MessagingEntityType);
            }

            _messageTypePathMappings.Add(messageTypePathMappingDetails);
        }
        private IMessageSource <TSourceMessage> CreateMessageSource <TSourceMessage>(MessageTypeMessagingEntityMappingDetails messageTypeMessageingEntityMappingDetails) where TSourceMessage : class, TMessage
        {
            Type messageType                   = messageTypeMessageingEntityMappingDetails.MessageType;
            Type messageSourceType             = typeof(MessageSource <>).MakeGenericType(messageType);
            Type messageSourceDeserializerType = typeof(IMessageDeserializer <>).MakeGenericType(messageType);

            return(Expression.Lambda <Func <IMessageSource <TSourceMessage> > >(
                       Expression.New(messageSourceType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, Type.DefaultBinder, new Type[] { typeof(IMessagingEntityFactory), typeof(IEnumerable <>).MakeGenericType(messageSourceDeserializerType), typeof(IMessageBrokeredMessageTable) }, null),
                                      Expression.Constant(_messagingEntityFactory),
                                      Expression.Call(
                                          Expression.Constant(_messageDeserializerFactory),
                                          typeof(IMessageDeserializerFactory).GetMethod("Create").MakeGenericMethod(messageType, typeof(TServiceMessage)),
                                          Expression.Constant(_assemblyFilter, typeof(Func <Assembly, bool>)),
                                          Expression.Constant(_typeFilter, typeof(Func <Type, bool>))),
                                      Expression.Constant(MessageBrokeredMessageTable.ConfiguredInstance, typeof(IMessageBrokeredMessageTable)))).Compile().Invoke());
        }
Esempio n. 3
0
        public override bool Equals(object obj)
        {
            MessageTypeMessagingEntityMappingDetails compareTo = obj as MessageTypeMessagingEntityMappingDetails;

            return(compareTo != null
                   &&
                   (!Object.ReferenceEquals(this, compareTo)
                    ||
                    (_receiveMode == compareTo._receiveMode
                     &&
                     _creationOptions == compareTo._creationOptions
                     &&
                     _path == compareTo._path
                     &&
                     _messageType == compareTo._messageType
                     &&
                     _messagingEntityType == compareTo._messagingEntityType)));
        }