internal static QueryDelegate CreateDelegate <TMiddleware>(
            Func <IServiceProvider, QueryDelegate, TMiddleware> factory,
            QueryDelegate next)
            where TMiddleware : class
        {
            object      sync       = new object();
            TMiddleware middleware = null;

            var compiled = MiddlewareActivator
                           .CompileMiddleware <TMiddleware, IQueryContext>();

            return(context =>
            {
                if (middleware == null)
                {
                    lock (sync)
                    {
                        if (middleware == null)
                        {
                            middleware = factory(context.Services, next);
                        }
                    }
                }

                return compiled(context, context.Services, middleware);
            });
        }
Ejemplo n.º 2
0
        private static FieldDelegate CreateDelegate <TMiddleware>(
            Func <IServiceProvider, FieldDelegate, TMiddleware> factory,
            FieldDelegate next)
            where TMiddleware : class
        {
            object      sync       = new object();
            TMiddleware middleware = null;

            ClassQueryDelegate <TMiddleware, IMiddlewareContext> compiled =
                MiddlewareActivator
                .CompileMiddleware <TMiddleware, IMiddlewareContext>();

            return(context =>
            {
                if (middleware == null)
                {
                    lock (sync)
                    {
                        if (middleware == null)
                        {
                            middleware = factory(
                                context.Service <IServiceProvider>(),
                                next);
                        }
                    }
                }

                return compiled(
                    context,
                    context.Service <IServiceProvider>(),
                    middleware);
            });
        }
Ejemplo n.º 3
0
        internal static QueryMiddleware Create <TMiddleware>()
            where TMiddleware : class
        {
            return(next =>
            {
                MiddlewareFactory <TMiddleware, QueryDelegate> factory =
                    MiddlewareActivator.CompileFactory <TMiddleware, QueryDelegate>();

                return CreateDelegate((s, n) => factory(s, n), next);
            });
        }
        internal static FieldMiddleware Create <TMiddleware>()
            where TMiddleware : class
        {
            return(next =>
            {
                var factory = MiddlewareActivator
                              .CompileFactory <TMiddleware, FieldDelegate>();

                return CreateDelegate <TMiddleware>(
                    (s, n) => factory(s, n),
                    next);
            });
        }
Ejemplo n.º 5
0
        public static FieldMiddleware Create <TMiddleware>(
            params object[] customParameters
            )
            where TMiddleware : class
        {
            return(next =>
            {
                MiddlewareFactory <TMiddleware, FieldDelegate> factory =
                    MiddlewareActivator
                    .CompileFactory <TMiddleware, FieldDelegate>(customParameters);

                return CreateDelegate(
                    (s, n) => factory(s, n),
                    next);
            });
        }