一个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;
        }
    } 
}

 肯定不是,

原文地址:https://www.cnblogs.com/hongdada/p/3044974.html