コード例 #1
0
ファイル: Program.cs プロジェクト: zhangsquared/IoC-AOP
        static void Main(string[] args)
        {
            ZsquaredPipelineBuilder app       = MockBuilder.BuildMiddleware();
            ZsquaredDelegate        zDelegate = app.Build();

            Console.WriteLine();

            ZsquaredContext context = new ZsquaredContext()
            {
                ID = 1, Name = "ZZ", IsSuccess = true
            };

            zDelegate.Invoke(context);
            Console.WriteLine(context.IsSuccess); // should return false

            Console.WriteLine();

            ZsquaredContext context2 = new ZsquaredContext()
            {
                ID = 2, Name = "Zsquared", IsSuccess = true
            };

            zDelegate.Invoke(context2);
            Console.WriteLine(context2.IsSuccess); // shoud return true

            Console.Read();
        }
コード例 #2
0
        public ZsquaredDelegate Build()
        {
            ZsquaredDelegate zd = context =>
            {
                Console.WriteLine("final step");
                context.IsSuccess = false;
            };

            foreach (var component in components.Reverse()) // 3, 2, 1
            {
                zd = component(zd);
            }
            return(zd); // 1
        }
コード例 #3
0
        public static ZsquaredPipelineBuilder BuildMiddleware()
        {
            ZsquaredPipelineBuilder app = new ZsquaredPipelineBuilder();

            // config middleware
            app.Use(next =>
            {
                Console.WriteLine("middleware 1 out");
                ZsquaredDelegate myDelegate = new ZsquaredDelegate(context =>
                {
                    Console.WriteLine("middleware 1 start");
                    next(context);
                    Console.WriteLine("middleware 1 end");
                });
                return(myDelegate);
            });
            app.Use(next =>
            {
                Console.WriteLine("middleware 2 out");
                ZsquaredDelegate myDelegate = new ZsquaredDelegate(context =>
                {
                    Console.WriteLine("middleware 2 start");
                    next(context);
                    Console.WriteLine("middleware 2 end");
                });
                return(myDelegate);
            });
            app.Use(next =>
            {
                Console.WriteLine("middleware 3 out");
                ZsquaredDelegate myDelegate = new ZsquaredDelegate(context =>
                {
                    Console.WriteLine("middleware 3 start");
                    if (context.Name.Equals("ZZ", StringComparison.InvariantCultureIgnoreCase))
                    {
                        next(context);
                    }
                    Console.WriteLine("middleware 3 end");
                });
                return(myDelegate);
            });

            return(app);
        }