zoukankan      html  css  js  c++  java
  • 一个HttpHandler的小设计

    例子

     class Program
        {
            static void Main()
            {
                Son s = new Son();
                s.show();
                Console.Read();
            }
        }
        abstract class Father
        {
            public void show()
            {
                doMethod();
            }
            protected abstract void doMethod();
        }
        class Son:Father
        {
            protected override void doMethod()
            {
    
                Console.WriteLine("Son Do Something");
            }
        }

    扩展

    namespace Test
    {
        class Program
        {
            static void Main()
            {
                IHttpHandler person = HttpHandlerFactory.CreateIHttpHandler("Handler");
                person.ProcessRequest();
                Console.Read();
            }
        }
        public interface IHttpHandler
        {
            void ProcessRequest();
        }
        public class HttpHandlerFactory
        {
            public static IHttpHandler CreateIHttpHandler(string type)
            {
                Assembly ass = Assembly.Load("Test");
                Type t = ass.GetType("Test." + type);
                object instance = Activator.CreateInstance(t, true);
                return instance as IHttpHandler;
            }
        }
        public abstract class HandlerBase : IHttpHandler
        {
            public void ProcessRequest()
            {
                doMethod();
            }
            protected abstract void doMethod();
        }
        class Handler : HandlerBase
        {
            protected override void doMethod()
            {
                Console.WriteLine("Son Do Something");
            }
        }
    }

    再扩展

    namespace Test
    {
        public class Context
        {
            public static string Controller = "Handler";
            public static string Action = "";
        }
        class Program
        {
            static void Main()
            {
                HttpHandlerFactory f = new HttpHandlerFactory();
                Console.Read();
            }
        }
        public interface IHttpHandler
        {
            void ProcessRequest();
        }
        public class HttpHandlerFactory
        {
            public HttpHandlerFactory()
            {
                IHttpHandler page = HttpHandlerFactory.CreateIHttpHandler(Context.Controller);
                page.ProcessRequest();
            }
            public static IHttpHandler CreateIHttpHandler(string type)
            {
                Assembly ass = Assembly.Load("Test");
                Type t = ass.GetType("Test." + type);
                object instance = Activator.CreateInstance(t, true);
                return instance as IHttpHandler;
            }
        }
        public abstract class HandlerBase : IHttpHandler
        {
            public void ProcessRequest()
            {
                doMethod();
            }
            protected abstract void doMethod();
        }
        class Handler : HandlerBase
        {
            protected override void doMethod()
            {
                Console.WriteLine("Son Do Something");
            }
        }
    }

    上面就是模拟一般处理程序的流程,一般没有HandlerBase,

     不晓得MVC是不是这样设计的

    namespace Test
    {
        public class Context
        {
            public static string NameSpace = "Test";
            public static string Controller = "Handler";
            public static string Action = "Show";
            public static object[] parameters = new object[] { "hongda", 5 };
        }
        class Program
        {
            static void Main()
            {
                Assembly ass = Assembly.Load(Context.NameSpace);
                Type t = ass.GetType(Context.NameSpace + "." + Context.Controller);
                object obj = ass.CreateInstance(Context.NameSpace + "." + Context.Controller);
                MethodInfo method = t.GetMethod(Context.Action);
                object result = method.Invoke(obj, Context.parameters);
                Console.WriteLine(result.ToString());
                Console.Read();
            }
        }
        public class Handler
        {
            public string Show(string a, int b)
            {
                return a + b;
            }
        } 
    }

     肯定不是,

  • 相关阅读:
    跨域资源共享 CORS 详解
    C# 每月第一天和最后一天
    jexus http to https
    ASP.NET MVC 路由学习
    jexus
    centos7 添加开机启动项
    jexus docker
    HTTP2.0新特性
    jexus配置支持Owin
    Autofac Named命名和Key Service服务
  • 原文地址:https://www.cnblogs.com/hongdada/p/3044974.html
Copyright © 2011-2022 走看看