在做移動接口的時候簡單使用了下反射,如此設計之后,接口的添加相對就方便了很多。
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 ""; } }