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); }); }
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); }); }
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); }); }
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); }); }