在做移动接口的时候简单使用了下反射,如此设计之后,接口的添加相对就方便了很多。
public
void
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 ""; } }