/// <summary> /// 从ObjectContext中创建非单例controller,并初始化(注入ctx和controller所属的appType) /// </summary> /// <param name="controllerType"></param> /// <param name="ctx"></param> /// <returns></returns> public static ControllerBase FindController(Type controllerType, MvcContext ctx) { if (controllerType == null) { return(null); } ControllerBase result = ObjectContext.CreateObject(controllerType) as ControllerBase; if (result == null) { return(null); } result.setContext(ctx); setControllerAppInfo(controllerType, result); //IControllerFactory factory; //factories.TryGetValue( controllerType.FullName, out factory ); //if (factory == null) return null; //ControllerBase result = factory.New(); //InjectController( result, ctx ); return(result); }
private void runAfterAction(MvcContext ctx) { List <String> pages = new List <String>(); List <ActionObserver> actionObservers = ControllerMeta.GetActionObservers(ctx.controller.GetType(), ctx.route.action); if (actionObservers == null) { return; } List <IPageCache> observedPages = new List <IPageCache>(); foreach (ActionObserver x in actionObservers) { logger.Info("run after ActionObserver=>" + x.GetType()); ActionObserver ob = (ActionObserver)ObjectContext.CreateObject(x.GetType()); ob.AfterAction(ctx); if (ob.GetType().IsSubclassOf(typeof(ActionCache))) { loadObservedPage((ActionCache)ob, observedPages); } } foreach (IPageCache pc in observedPages) { logger.Info("update IPageCache=" + pc.GetType().FullName); pc.UpdateCache(ctx); } }
private void runJobSingle(HtmlJobItem x) { try { Object p = ObjectContext.CreateObject(x.Name); if (strUtil.HasText(x.Ids)) { rft.CallMethod(p, x.Method, new object[] { x.Ids }); cdb.delete(x); } else if (x.PostId > 0) { rft.CallMethod(p, x.Method, new object[] { x.PostId }); cdb.delete(x); } else { logger.Info("param is invalid. type=" + x.Name + ", method=" + x.Method); } } catch (Exception ex) { logger.Error(ex.Message); logger.Error(ex.StackTrace); } }
private void runJobSingle(HtmlJobItem x) { try { Object p = ObjectContext.CreateObject(x.Name); rft.CallMethod(p, x.Method, new object[] { x.PostId }); cdb.delete(x); } catch (Exception ex) { logger.Error(ex.Message); logger.Error(ex.StackTrace); } }
private static Dictionary <String, IInitHelper> getInitList() { Dictionary <String, IInitHelper> map = new Dictionary <String, IInitHelper>(); foreach (KeyValuePair <String, Type> kv in ObjectContext.Instance.TypeList) { if (rft.IsInterface(kv.Value, typeof(IInitHelper)) == false) { continue; } IInitHelper obj = ObjectContext.CreateObject(kv.Value) as IInitHelper; map.Add(obj.GetMemberType().Name.ToLower(), obj); } return(map); }
/// <summary> /// 从ObjectContext中创建非单例controller,并初始化(注入ctx和controller所属的appType) /// </summary> /// <param name="controllerType"></param> /// <param name="ctx"></param> /// <returns></returns> public static ControllerBase FindController(Type controllerType, MvcContext ctx) { if (controllerType == null) { return(null); } ControllerBase controller = ObjectContext.CreateObject(controllerType) as ControllerBase; if (controller == null) { return(null); } ObjectContext.InterceptProperty(controller); controller.setContext(ctx); setControllerAppInfo(controllerType, controller); return(controller); }
private static Dictionary <Type, IMenuService> getMenuServiceMap() { Dictionary <Type, IMenuService> map = new Dictionary <Type, IMenuService>(); foreach (KeyValuePair <String, Type> kv in ObjectContext.Instance.TypeList) { if (kv.Value.IsAbstract) { continue; } if (rft.IsInterface(kv.Value, typeof(IMenuService)) == false) { continue; } IMenuService obj = ObjectContext.CreateObject(kv.Value) as IMenuService; map.Add(obj.GetMemberType(), obj); } return(map); }
public static T CopyEntity <T>(ObjectContext ctx, T entity, bool copyKeys = false) where T : EntityObject { T clone = ctx.CreateObject <T>(); PropertyInfo[] pis = entity.GetType().GetProperties(); foreach (PropertyInfo pi in pis) { EdmScalarPropertyAttribute[] attrs = (EdmScalarPropertyAttribute[]) pi.GetCustomAttributes(typeof(EdmScalarPropertyAttribute), false); foreach (EdmScalarPropertyAttribute attr in attrs) { if (!copyKeys && attr.EntityKeyProperty) { continue; } pi.SetValue(clone, pi.GetValue(entity, null), null); } } return(clone); }
//-------------------------------------------- public T Validate(MvcContext ctx) { String title = ctx.Post("Title"); String question = ctx.PostHtml("Question"); string[] answers = ctx.web.postValuesByKey("Answer"); StringBuilder builder = new StringBuilder(); int acount = 0; foreach (String answer in answers) { if ((strUtil.HasText(answer) && (answer.Length > 0)) && (answer.Length < 80)) { builder.Append(answer); builder.Append("\n"); acount++; } } String strAnswer = builder.ToString(); int polltype = ctx.PostInt("PollType"); int days = ctx.PostInt("Days"); int voterRank = ctx.PostInt("VoterRank"); String strIsVisible = ctx.Post("IsVisible"); String openVoter = ctx.Post("OpenVoter"); if (strUtil.IsNullOrEmpty(title)) { ctx.errors.Add(lang.get("exTitle")); } if (strUtil.IsNullOrEmpty(strAnswer)) { ctx.errors.Add(alang(ctx, "exPollOptions")); } if (strUtil.HasText(strAnswer)) { if (acount < 2) { ctx.errors.Add(alang(ctx, "exPollMinTwoOptions")); } if (acount > 20) { ctx.errors.Add(alang(ctx, "exPollMaxTwoOptions")); } } if (days > 365 * 10) { ctx.errors.Add(alang(ctx, "exPollMaxDay")); days = 0; } T poll = (T)ObjectContext.CreateObject(typeof(T)); poll.Title = title; poll.Question = question; poll.Answer = strAnswer; poll.ExpiryDate = DateTime.Now.AddDays((double)days); poll.VoterRank = voterRank; int isVisible = 0; if (strUtil.HasText(strIsVisible) && strIsVisible.Equals("on")) { isVisible = 1; } int isOpenVoter = 0; if (strUtil.HasText(openVoter) && openVoter.Equals("on")) { isOpenVoter = 1; } poll.Type = polltype; poll.IsVisible = isVisible; poll.IsOpenVoter = isOpenVoter; poll.Creator = (User)ctx.viewer.obj; poll.CreatorUrl = ctx.viewer.obj.Url; poll.OwnerId = ctx.owner.Id; poll.OwnerType = ctx.owner.obj.GetType().FullName; poll.OwnerUrl = ctx.owner.obj.Url; poll.AppId = ctx.app.Id; poll.Ip = ctx.Ip; return(poll); }
public override void Process(ProcessContext context) { MvcEventPublisher.Instance.BeginProcessAction(context.ctx); if (context.ctx.utils.isSkipCurrentProcessor()) { return; } MvcContext ctx = context.ctx; ControllerBase controller = ctx.controller; // 1) 检查 action 缓存 ActionCacheChecker xChecker = ActionCacheChecker.InitAction(ctx); Object cacheContent = xChecker.GetCache(); if (cacheContent != null) { logger.Info("load from actionCache=" + xChecker.CacheKey); context.setContent(cacheContent.ToString()); setPageMeta_FromCache(ctx, xChecker.CacheKey); return; } // 2) 运行 before action (获取所有的 ActionObserver) List <ActionObserver> actionObservers = ControllerMeta.GetActionObservers(controller.GetType(), ctx.route.action); if (actionObservers != null) { foreach (ActionObserver x in actionObservers) { ActionObserver ob = (ActionObserver)ObjectContext.CreateObject(x.GetType()); Boolean isContinue = ob.BeforeAction(ctx); if (!isContinue) { return; } } } // 3) 运行 action MethodInfo actionMethod = ctx.ActionMethodInfo; // context.getActionMethod(); // 设值模板并载入全局变量 setControllerView(controller, actionMethod); // 运行并处理post值 ActionRunner.runAction(ctx, controller, actionMethod, controller.utils.runAction); if (ctx.utils.isEnd()) { afterAction(ctx); return; } String actionContent = controller.utils.getActionResult(); // 4) 后续缓存处理 if (xChecker.IsActionCache) { xChecker.AddCache(actionContent); addPageMeta_ToCache(ctx, xChecker.CacheKey); } actionContent = PostValueProcessor.ProcessPostValue(actionContent, ctx); if (ctx.utils.isAjax) { context.showEnd(actionContent); } else if (ctx.utils.isFrame()) { int intNoLayout = ctx.utils.getNoLayout(); if (intNoLayout == 0) { String content = MvcUtil.getFrameContent(actionContent); context.showEnd(content); } else { context.setContent(actionContent); } } else { context.setContent(actionContent); } afterAction(ctx); }
public void Create() { int appInfoId = cvt.ToInt(ctx.Post("appInfoId")); AppInstaller info = getAppInfo(appInfoId); if (info.IsClose(ctx.owner.obj.GetType())) { echo("app closed"); return; } if (!checkInstall(info)) { return; } String name = ctx.Post("Name"); //AccessStatus accs = AccessStatusUtil.GetPostValue( ctx.PostInt( "AccessStatus" ) ); AccessStatus accs = AccessStatus.Public; Type appType = ObjectContext.Instance.TypeList[info.TypeFullName]; if (rft.IsInterface(appType, typeof(IAppInstaller))) { // 主题ID String themeId = ctx.Post("themeId"); IAppInstaller customInstaller = ObjectContext.CreateObject(appType) as IAppInstaller; IMemberApp capp = customInstaller.Install(ctx, ctx.owner.obj, name, accs, themeId); intiAppPermission(capp); echoToParentPart(lang("opok"), to(Index), 1); return; } IMember owner = ctx.owner.obj; User creator = (User)ctx.viewer.obj; // 1、添加一条 IMemberApp IMemberApp app = userAppService.Add(creator, owner, name, info.Id, accs); if (app != null) { // 2、添加菜单 String appUrl = UrlConverter.clearUrl(app, ctx); menuService.AddMenuByApp(app, name, "", appUrl); // 3、初始化权限 intiAppPermission(app); log(SiteLogString.InsertApp(), app); echoToParentPart(lang("opok"), to(Index), 1); } else { errors.Add(lang("exop")); run(NewApp, info.Id); } }
public void testIocAndAop() { TComplexObject obj = ObjectContext.CreateObject(typeof(TComplexObject)) as TComplexObject; obj.Save(); }