/// <summary> /// Adds a middleware type to the store's dispatch pipeline. /// </summary> /// <param name="middleware">The middleware type.</param> /// <param name="args">The arguments to pass to the middleware type instance's constructor.</param> /// <returns>The <see cref="IStoreBuilder{TState}"/> instance.</returns> public IStoreBuilder <TState> UseMiddleware(Type middleware, params object[] args) { if (middleware == null) { throw new ArgumentNullException(nameof(middleware)); } return(UseMiddleware(MiddlewareFactory.Create <TState>(middleware, args))); }
public void Append(MiddlewareFactory middleware) { if (IsFrozen) { throw new Exception(); } _middleware.Add(middleware); }
private static void TestFactory() { Console.WriteLine("Test Factory!"); var middlewareFactory = new MiddlewareFactory(); IMiddleware middleware = middlewareFactory.GetMiddleware((int)CommonObj.SQLEnum.SQLServer); middleware.DoAction(); middleware = middlewareFactory.GetMiddleware((int)CommonObj.SQLEnum.MySQL); middleware.DoAction(); }
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); }); }
public static FieldMiddleware Create <TMiddleware>() where TMiddleware : class { return(next => { MiddlewareFactory <TMiddleware, FieldDelegate> factory = MiddlewareActivator .CompileFactory <TMiddleware, FieldDelegate>(); return CreateDelegate( (s, n) => factory(s, n), next); }); }
static bool TestFactoryPattern() { Console.WriteLine("TESTING THE FACTORY DESIGN PATTERN: "); var middlewareFactory = new MiddlewareFactory(); IMiddleware middleware = middlewareFactory.GetMiddleware(1); middleware.DoAction(); middleware = middlewareFactory.GetMiddleware(2); middleware.DoAction(); return(true); }
internal static DirectiveMiddleware Create <TMiddleware>() where TMiddleware : class { return(next => { MiddlewareFactory <TMiddleware, IServiceProvider, FieldDelegate> factory = MiddlewareCompiler <TMiddleware> .CompileFactory <IServiceProvider, FieldDelegate>( (services, next) => new IParameterHandler[] { new ServiceParameterHandler(services) }); return CreateDelegate( (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); }); }
public void CompileDelegate() { // arrange MiddlewareFactory <CustomClassMiddleware, IServiceProvider, CustomDelegate> factory = MiddlewareCompiler <CustomClassMiddleware> .CompileFactory <IServiceProvider, CustomDelegate>( (services, next) => new List <IParameterHandler> { new TypeParameterHandler(typeof(string), Expression.Constant("abc")), new ServiceParameterHandler(services) }); CustomClassMiddleware middleware = factory.Invoke(new EmptyServiceProvider(), c => default); // act ClassQueryDelegate <CustomClassMiddleware, CustomContext> pipeline = MiddlewareCompiler <CustomClassMiddleware> .CompileDelegate <CustomContext>( (context, middleware) => new List <IParameterHandler> { new TypeParameterHandler(typeof(string), Expression.Constant("def")) }); // assert var context = new CustomContext(new EmptyServiceProvider()); pipeline.Invoke(context, middleware); Assert.Equal("abcdef", context.Result); }
public void CompileFactory() { // arrange // act MiddlewareFactory <CustomClassMiddleware, IServiceProvider, CustomDelegate> factory = MiddlewareCompiler <CustomClassMiddleware> .CompileFactory <IServiceProvider, CustomDelegate>( (services, next) => new List <IParameterHandler> { new TypeParameterHandler(typeof(string), Expression.Constant("abc")), new ServiceParameterHandler(services) }); // assert CustomClassMiddleware middleware = factory.Invoke(new EmptyServiceProvider(), c => default); Assert.Equal("abc", middleware.Some); }