苏州毛毛
小小程序员的发展历程

 在做移动接口的时候简单使用了下反射,如此设计之后,接口的添加相对就方便了很多。

 publicvoid ProcessRequest(HttpContext context)
{
        //初始化并获取参数
        ParamInit(context);

        context.Response.ContentType = "text/plain";

        string func = clsConfig.GetParamString(context.Request["func"]);

         if (func != "")
         {
                //反射调用方法
                Type t = Type.GetType("CCTalk.api.DynamicEvent");

                MethodInfo minfo = t.GetMethod(func);

                var dynamicEvent = t.Assembly.CreateInstance("CCTalk.api.DynamicEvent") as DynamicEvent;

                //参数作为属性传过去
                dynamicEvent.listParams = listParams;

                context.Response.Write(minfo.Invoke(dynamicEvent,null).ToString());
         }

       context.Response.End();
}

映射好实现的方法类后,需要实现是否接口,只要添加对应方法即可。

 public class DynamicEvent
 {
     public Dictionary<string, object> listParams { get; set; }
     
     public string GetPublicRoomJson()
     {
            var publicRoom= RoomHelper.GetAllRooms().Where(c => c.RoomType == (int)RoomType.Public).ToList();
            return JsonTools.ToJson(GetMRoomInfoFromRoomInfo(publicRoom));
     }

     /// <summary>
     /// 获取我的房间信息(包含公共教室)
     /// </summary>
     public string GetMyRoomJson()
     {
            List<RoomInfo> rooms = null;

            int userId = int.Parse(listParams["userid"].ToString());

            if (userId > 0)
            {
                var userRoomIds = RoomHelper.GetUserRoomIds(userId);

                string roomIds = "";

                foreach (int roomid in userRoomIds)
                {
                    roomIds += roomid+",";
                }               

                rooms = RoomHelper.GetAllRooms().Where(c => c.RoomType == (int)RoomType.Public || userRoomIds.Contains(c.RoomID)).ToList();

                return JsonTools.ToJson(GetMRoomInfoFromRoomInfo(rooms));
            }
            return "";
      }
}    

 

posted on 2013-12-23 17:39  苏州毛毛  阅读(3185)  评论(1编辑  收藏  举报