コード例 #1
0
        private TaskFunc CreateCallDelegate(IServiceProvider serviceProvider)
        {
            var contextParameter = Expression.Parameter(typeof(ITaskContext));
            var expression       = TaskBuilderUtils.ApplyMiddlewares(serviceProvider, contextParameter, Expression.Lambda <Func <Task> >(
                                                                         Expression.Call(
                                                                             _delegate.Method.IsStatic
                        ? null
                        : Expression.Constant(_delegate.Target),
                                                                             _delegate.Method,
                                                                             TaskBuilderUtils.MapParameters(serviceProvider, contextParameter, _delegate.Method)
                                                                             )
                                                                         ));
            var taskFuncExpression = Expression.Lambda <TaskFunc>(expression.Body, contextParameter);

            Console.WriteLine(taskFuncExpression);

            return(taskFuncExpression.Compile());
        }
コード例 #2
0
        private TaskFunc CreateCallDelegate(IServiceProvider serviceProvider)
        {
            var contextParameter = Expression.Parameter(typeof(ITaskContext));
            var expression       = TaskBuilderUtils.ApplyMiddlewares(serviceProvider, contextParameter, Expression.Lambda <Func <Task> >(
                                                                         Expression.Call(
                                                                             _methodInfo.IsStatic
                        ? null
                        : Expression.Constant(serviceProvider.GetRequiredService(_taskContainerType)),
                                                                             _methodInfo,
                                                                             TaskBuilderUtils.MapParameters(serviceProvider, contextParameter, _methodInfo)
                                                                             )
                                                                         ));
            var taskFuncExpression = Expression.Lambda <TaskFunc>(expression.Body, contextParameter);

            Console.WriteLine(taskFuncExpression);

            return(taskFuncExpression.Compile());
        }