Beispiel #1
0
        /// <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)));
        }
Beispiel #2
0
        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();
        }
Beispiel #4
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);
            });
        }
Beispiel #5
0
        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);
            });
        }
Beispiel #6
0
        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);
            });
        }
Beispiel #8
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);
            });
        }
        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);
        }