一个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;
        }
    } 
}
复制代码

 肯定不是,

posted @   hongdada  阅读(319)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示