コード例 #1
0
        /// <summary>
        /// Bind to a collector.
        /// </summary>
        /// <typeparam name="TMessage"></typeparam>
        /// <param name="buildFromAttribute"></param>
        /// <returns></returns>
        public void BindToCollector <TMessage>(
            IAsyncConverter <TAttribute, IAsyncCollector <TMessage> > buildFromAttribute)
        {
            var pm = PatternMatcher.New(buildFromAttribute);

            BindToCollector <TMessage>(pm);
        }
コード例 #2
0
        /// <summary>
        /// Add a converter for the given Source to Destination conversion.
        /// </summary>
        /// <typeparam name="TSource">Source type.</typeparam>
        /// <typeparam name="TDestination">Destination type.</typeparam>
        /// <param name="converterInstance">Instance of an object with convert methods on it.</param>
        public TThis AddConverter <TSource, TDestination>(
            IAsyncConverter <TSource, TDestination> converterInstance)
        {
            var patternMatcher = PatternMatcher.New(converterInstance);

            return(AddConverterBuilder <TSource, TDestination>(patternMatcher));
        }
コード例 #3
0
        /// <summary>
        /// Bind an attribute to the given input, using the converter manager.
        /// </summary>
        /// <typeparam name="TType"></typeparam>
        /// <param name="builderInstance"></param>
        /// <returns></returns>
        public void BindToInput <TType>(IAsyncConverter <TAttribute, TType> builderInstance)
        {
            var bf = _parent.BindingFactory;

            var pm   = PatternMatcher.New(builderInstance);
            var rule = new BindToInputBindingProvider <TAttribute, TType>(bf.NameResolver, bf.ConverterManager, pm);

            Bind(rule);
        }
コード例 #4
0
            async Task <CloudQueue> IAsyncConverter <QueueAttribute, CloudQueue> .ConvertAsync(
                QueueAttribute attrResolved,
                CancellationToken cancellation)
            {
                IAsyncConverter <QueueAttribute, IStorageQueue> convert = this;
                var queue = await convert.ConvertAsync(attrResolved, cancellation);

                return(queue.SdkObject);
            }
コード例 #5
0
        /// <summary>
        /// Bind to a collector.
        /// </summary>
        /// <typeparam name="TMessage"></typeparam>
        /// <param name="buildFromAttribute"></param>
        /// <returns></returns>
        public void BindToCollector <TMessage>(
            IAsyncConverter <TAttribute, IAsyncCollector <TMessage> > buildFromAttribute)
        {
            var bf   = _parent.BindingFactory;
            var pm   = PatternMatcher.New(buildFromAttribute);
            var rule = new AsyncCollectorBindingProvider <TAttribute, TMessage>(bf.NameResolver, bf.ConverterManager, pm);

            Bind(rule);
        }
 public MicrosoftGraphExtensionConfigProvider(IOptions <GraphOptions> options,
                                              ILoggerFactory loggerFactory,
                                              IGraphServiceClientProvider graphClientProvider,
                                              INameResolver appSettings,
                                              IAsyncConverter <TokenBaseAttribute, string> tokenConverter,
                                              IGraphSubscriptionStore subscriptionStore)
 {
     _options = options.Value;
     _options.SetAppSettings(appSettings);
     _graphServiceClientManager = new GraphServiceClientManager(_options, tokenConverter, graphClientProvider);
     _subscriptionStore         = subscriptionStore;
     _loggerFactory             = loggerFactory;
 }
コード例 #7
0
        public async Task TestUnsubscribe()
        {
            var ext = new EventGridExtensionConfig();

            var host = TestHelpers.NewHost <MyProg1>(ext);

            await host.StartAsync(); // add listener

            var request = CreateUnsubscribeRequest("TestEventGrid");
            IAsyncConverter <HttpRequestMessage, HttpResponseMessage> handler = ext;
            var response = await handler.ConvertAsync(request, CancellationToken.None);

            Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);
        }
コード例 #8
0
            public override FuncAsyncConverter Execute(object instance)
            {
                IAsyncConverter <TSrc, TDest> converter = (IAsyncConverter <TSrc, TDest>)instance;

                FuncAsyncConverter func = async(input, attr, ctx) =>
                {
                    TSrc  src    = (TSrc)input;
                    var   cts    = ctx == null ? CancellationToken.None : ctx.CancellationToken;
                    TDest result = await converter.ConvertAsync(src, cts);

                    return(result);
                };

                return(func);
            }
コード例 #9
0
            public override Func <object, object> Work(object instance)
            {
                IAsyncConverter <TSrc, TDest> converter = (IAsyncConverter <TSrc, TDest>)instance;

                Func <object, object> func = (input) =>
                {
                    TSrc         src        = (TSrc)input;
                    Task <TDest> resultTask = Task.Run(() => converter.ConvertAsync(src, CancellationToken.None));

                    TDest result = resultTask.GetAwaiter().GetResult();
                    return(result);
                };

                return(func);
            }
コード例 #10
0
        public async Task TestDispatch()
        {
            var ext = new EventGridExtensionConfig();

            var host = TestHelpers.NewHost <MyProg1>(ext);

            await host.StartAsync(); // add listener

            var request = CreateDispatchRequest("TestEventGrid",
                                                JObject.Parse(@"{'subject':'one','data':{'prop':'alpha'}}"),
                                                JObject.Parse(@"{'subject':'two','data':{'prop':'beta'}}"));

            IAsyncConverter <HttpRequestMessage, HttpResponseMessage> handler = ext;
            var response = await handler.ConvertAsync(request, CancellationToken.None);

            // Verify that the user function was dispatched twice, in order.
            // Also verifies each instance gets its own proper binding data (from FakePayload.Prop)
            Assert.Equal("[Dispatch:one, alpha][Dispatch:two, beta]", _log.ToString());

            // TODO - Verify that we return from webhook before the dispatch is finished
            // https://github.com/Azure/azure-functions-eventgrid-extension/issues/10
            Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);
        }
コード例 #11
0
 // T1,T2 may be open types.
 public static PatternMatcher New <T1, T2>(IAsyncConverter <T1, T2> instance)
 {
     return(new CreateFromInstance(instance));
 }
コード例 #12
0
 public OutputConverter(IAsyncConverter <TInput, ServiceBusEntity> innerConverter)
 {
     _innerConverter = innerConverter;
 }
コード例 #13
0
 public BlobOutputConverter(IAsyncConverter <TInput, IStorageBlob> innerConverter)
 {
     _innerConverter = innerConverter;
 }
コード例 #14
0
 public BlobOutputConverter(IAsyncConverter <TInput, BlobBaseClient> innerConverter)
 {
     _innerConverter = innerConverter;
 }
 public GraphServiceClientManager(GraphOptions options, IAsyncConverter <TokenBaseAttribute, string> tokenProvider, IGraphServiceClientProvider clientProvider)
 {
     _tokenProvider  = tokenProvider;
     _clientProvider = clientProvider;
     _options        = options;
 }
コード例 #16
0
 public ConverterArgumentBinding(IAsyncConverter <Message, T> converter)
 {
     _converter = converter;
 }
コード例 #17
0
 public BlobOutputConverter(IAsyncConverter <TInput, ICloudBlob> innerConverter)
 {
     _innerConverter = innerConverter;
 }
コード例 #18
0
        /// <summary>
        /// Bind an attribute to a stream. This ensures the stream is flushed after the user function returns.
        /// It uses the attribute's Access property to determine direction (Read/Write).
        /// It includes rules for additional types of TextReader,string, byte[], and TextWriter,out string, out byte[].
        /// </summary>
        /// <param name="builderInstance"></param>
        /// <param name="fileAccess"></param>
        public void BindToStream(IAsyncConverter <TAttribute, Stream> builderInstance, FileAccess fileAccess)
        {
            var pm = PatternMatcher.New(builderInstance);

            BindToStream(pm, fileAccess);
        }
コード例 #19
0
        /// <summary>
        /// Bind an attribute to the given input, using the converter manager.
        /// </summary>
        /// <typeparam name="TType"></typeparam>
        /// <param name="builderInstance"></param>
        /// <returns></returns>
        public FluentBinder BindToInput <TType>(IAsyncConverter <TAttribute, TType> builderInstance)
        {
            var pm = PatternMatcher.New(builderInstance);

            return(BindToInput <TType>(pm));
        }
コード例 #20
0
 public ConverterArgumentBindingProvider(IAsyncConverter <BrokeredMessage, T> converter)
 {
     _converter = converter;
 }