예제 #1
0
        bool IReaderRule.TryToApply(RouteChain chain)
        {
            var customReaders = _serializers.CustomReadersFor(chain.InputType);

            if (customReaders.Length == 1)
            {
                chain.Reader = customReaders.Single();
                chain.Middleware.Add(new UseReader(chain, true));
            }
            else if (customReaders.Length > 1)
            {
                chain.ConnegReader = _serializers.ReaderFor(chain.InputType);
                var selectReader = new SelectReader();
                chain.Middleware.Add(selectReader);
                chain.Middleware.Add(new CheckForMissing(415, selectReader.ReturnVariable));
                chain.Middleware.Add(new UseReader(chain, false));
            }
            else
            {
                var reader = _serializers.ReaderFor(chain.InputType);


                chain.Reader = _serializers.JsonReaderFor(chain.InputType);
                chain.Middleware.Add(new UseReader(chain, true));
            }

            return(true);
        }
예제 #2
0
        public void ApplyConneg(SerializationGraph graph)
        {
            if (InputType != null)
            {
                ConnegReader = graph.ReaderFor(InputType);
            }

            if (ResourceType != null)
            {
                ConnegWriter = graph.WriterFor(ResourceType);
            }
        }
예제 #3
0
        public Envelope EnvelopeForRequestResponse <TResponse>(object request)
        {
            var messageType = typeof(TResponse).ToMessageAlias();
            var reader      = _serialization.ReaderFor(messageType);

            var envelope = new Envelope
            {
                Message              = request,
                ReplyRequested       = messageType,
                AcceptedContentTypes = reader.ContentTypes
            };

            return(envelope);
        }
예제 #4
0
        }                                         // could be a default here

        public IEnumerable <Subscription> DetermineSubscriptions(SerializationGraph serialization, Type[] allTypes, Uri defaultReceiver)
        {
            var receiver = ReceiverLocation ?? defaultReceiver;

            return(Includes.SelectMany(allTypes.Where)
                   .Concat(MessageTypes)
                   .Distinct()
                   .Select(type =>
            {
                var reader = serialization.ReaderFor(type);
                return new Subscription(type, receiver)
                {
                    Accept = reader.ContentTypes
                };
            }));
        }
예제 #5
0
        public Envelope EnvelopeForRequestResponse <TResponse>(object request)
        {
            var messageType = typeof(TResponse).ToMessageAlias();

            _serialization.RegisterType(typeof(TResponse));

            var reader = _serialization.ReaderFor(messageType);

            return(new Envelope
            {
                Message = request,
                ReplyRequested = messageType,
                AcceptedContentTypes = reader.ContentTypes,
                RequiresLocalReply = true
            });
        }
 public void scans_for_custom_readers_in_the_app_assembly()
 {
     theSerialization.ReaderFor(typeof(Message1).ToMessageAlias())
     .ContentTypes.ShouldContain("green");
 }