Beispiel #1
0
        //释放控制器对象
        public void ReleaseController(IAddInController controller)
        {
            IDisposable disposable = controller as IDisposable;

            if (disposable != null)
            {
                disposable.Dispose();
            }
        }
Beispiel #2
0
 /// <summary>Implements the OnConnection method of the IDTExtensibility2 interface. Receives notification that the Add-in is being loaded.</summary>
 /// <param term='application'>Root object of the host application.</param>
 /// <param term='connectMode'>Describes how the Add-in is being loaded.</param>
 /// <param term='addInInst'>Object representing this Add-in.</param>
 public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
 {
     try
     {
         _adapter = new AddInAdapter(addInInst);
         _controller = new AddInController(_adapter);
         _controller.OnConnection(application, connectMode, addInInst, ref custom);
     }
     catch (Exception e)
     {
         ShowMessage("Error Connect.OnConnection: " + e.Message);
     }
 }
Beispiel #3
0
 /// <summary>Implements the OnConnection method of the IDTExtensibility2 interface. Receives notification that the Add-in is being loaded.</summary>
 /// <param term='application'>Root object of the host application.</param>
 /// <param term='connectMode'>Describes how the Add-in is being loaded.</param>
 /// <param term='addInInst'>Object representing this Add-in.</param>
 public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
 {
     try
     {
         _adapter    = new AddInAdapter(addInInst);
         _controller = new AddInController(_adapter);
         _controller.OnConnection(application, connectMode, addInInst, ref custom);
     }
     catch (Exception e)
     {
         ShowMessage("Error Connect.OnConnection: " + e.Message);
     }
 }
Beispiel #4
0
        //通过当前的请求上下文和控制器名称得到控制器的对象
        public IAddInController CreateController(RouteData routeData, string controllerName)
        {
            if (routeData == null)
            {
                throw new ArgumentNullException("routeData");
            }

            if (string.IsNullOrEmpty(controllerName))
            {
                throw new ArgumentException("controllerName");
            }
            //得到当前的控制类型
            Type controllerType = GetControllerType(routeData, controllerName);

            if (controllerType == null)
            {
                return(null);
            }
            //得到控制器对象
            IAddInController controller = GetControllerInstance(routeData, controllerType);

            return(controller);
        }
Beispiel #5
0
        public virtual void ProcessRequest(HttpContext context)
        {
            //写入MVC的版本到HttpHeader里面
            //AddVersionHeader(httpContext);
            //移除参数
            //RemoveOptionalRoutingParameters();

            //过滤文件请求
            //string url = context.Request.RawUrl;
            //if (!url.Contains("."))
            //{
            //1.从当前的RouteData里面得到请求的控制器名称
            string domainName     = RouteData.RouteValue["addindomain"].ToString();
            string controllerName = RouteData.RouteValue["controller"].ToString();
            string actionName     = RouteData.RouteValue["action"].ToString();

            if (domainName.ToLower() != "AddInsDomain".ToLower())
            {
                try
                {
                    if (RouteData.RouteValue.ContainsKey("postData"))
                    {
                        object[] parameters = ((List <object>)RouteData.RouteValue["postData"]).ToArray();

                        object obj = AddIn.Entity.AddInManager.Execute(domainName, controllerName, actionName, parameters);

                        context.Response.Write(obj.ToString());
                    }
                    else
                    {
                        object obj = AddIn.Entity.AddInManager.Execute(domainName, controllerName, actionName, null);
                        context.Response.Write(obj.ToString());
                    }
                }
                catch (Exception ex)
                {
                    context.Response.Write(ex.Message);
                }
                context.Response.End();
            }
            else
            {
                //2.得到控制器工厂
                IAddInControllerFactory factory = new AddInControllerFactory();

                //3.通过默认控制器工厂得到当前请求的控制器对象
                IAddInController controller = factory.CreateController(RouteData, controllerName);
                if (controller == null)
                {
                    context.Response.Write("找不到控制器!");
                    return;
                }

                try
                {
                    //4.执行控制器的Action
                    controller.Execute(RouteData);
                }
                catch (Exception ex)
                {
                    Common.Log.Write("/" + domainName + "/" + controllerName + "/" + actionName + ":" + ex.ToString());
                    context.Response.Write(ex.Message);
                }
                finally
                {
                    //5.释放当前的控制器对象
                    factory.ReleaseController(controller);
                }
            }
            //}
        }