码迷,mamicode.com
首页 > Web开发 > 详细

asp.net 一般处理程序小优化

时间:2014-08-29 21:19:58      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   io   ar   for   div   

使用asp.net mvc习惯了,最近项目中又开始使用asp.net,有大量的ajax方法调用,之前有两种方法来处理:

  1. Switch case :方法少还行,如果很多,就太蛋疼了,而且方法堆在一块,也不美观
  2. 匿名方法:方法复用不好,vs代码也不便于折叠

最近研究了一下用反射方法来做,把类中所有公开方法都通过反射找出存到字典中,调用时匹配字典中的key,看是否有此方法。

以下是我写的方法,这种方法我总结有以下优点:

  1. 不用大量写大量判断语句,简洁
  2. 方法可以复用
  3. 可以集中处理一些事情,如调用前监控,处理;异常处理;...
  4. 如果有不同实现,可以调用不同的接口(虚方法)的实现(我这里为了省事,没有用接口)

但是我不知道这样写,会不会有性能损耗,是否还有优化的地方,欢迎大家指点。

  public class NewServices : IHttpHandler
    {
        private static readonly IDictionary<string, MethodInfo> Services = new Dictionary<string, MethodInfo>(StringComparer.OrdinalIgnoreCase);

        public void ProcessRequest(HttpContext context)
        {
            var action = context.Request["action"];
            if (action.IsNotNullAndWhiteSpace() && Services.ContainsKey(action))
            {
                try
                {
                    Services[action].Invoke(new NewServicesApi(context), null);
                }
                catch (Exception ex)
                {
                    context.WriteJson(new JsonResultInfo().SetError(ex.Message));
                }
            }
            else
            {
                context.WriteJson(new JsonResultInfo().SetError("{0}方法不存在!".FormatWith(action)));
            }
        }

        static NewServices()
        {
            Services.Clear();
            var methods = typeof(NewServicesApi).GetMethods(BindingFlags.Public | BindingFlags.Instance);
            foreach (var m in methods)
            {
                Services.Add(m.Name, m);
            }
        }
        public bool IsReusable { get { return false; } }
    }

    internal class NewServicesApi
    {
        private HttpContext context;
        private HttpRequest Request;
        private HttpResponse Response;
        public NewServicesApi(HttpContext context)
        {
            this.context = context;
            Request = context.Request;
            Response = context.Response;
        }
        public void Test()
        {
            Response.Write("test");
        }
    }

 

asp.net 一般处理程序小优化

标签:style   blog   http   color   使用   io   ar   for   div   

原文地址:http://www.cnblogs.com/lizhanglong/p/3945727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!