网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

详解ASP.NET MVC Controller激活系统:总体设计

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/05
会话状态行为。
  • Required:为请求启用完全的读写会话状态行为。
  • ReadOnly:为请求启用只读会话状态。
  • Disabled:禁用会话状态。
  • 对于Default选项来说,ASP.NET通过映射的HttpHandler类型是否实现了相关接口来决定具体的会话状态控制行为。在System.Web.SessionState命名空间下定义了IRequiresSessionState和IRequiresSessionState接口,如下面的代码片断所示,这两个都是不具有任何成员的空接口(我们一般称之为标记接口),而IReadOnlySessionState继承自IRequiresSessionState。如果HttpHandler实现了接口IReadOnlySessionState,则意味着采用ReadOnly模式,如果只实现了IRequiresSessionState则采用Required模式。

       1: public interface IRequiresSessionState
       2: {}
       3: public interface IReadOnlySessionState : IRequiresSessionState
       4: {}

    具体采用何种会话状态行为取决于当前HTTP上下文(HttpContext.Current)。对于之前的版本,我们不能对当前HTTP上下文的会话状态行为模式进行动态的修改,ASP.NET 4.0为HttpContext定义了如下一个SetSessionStateBehavior方法是我们可以自由地选择会话状态行为模式。相同的方法同样定义在HttpContextBase中,它的子类HttpContextWrapper重写了这个方法并在内部会调用封装的HttpContext的同名方法。

    1. public sealed class HttpContext : IServiceProvider, IPrincipalContainer  
    2.  {  
    3.     //其他成员  
    4.  public void SetSessionStateBehavior(  
    5.      SessionStateBehavior sessionStateBehavior);  
    6.  }  
    7.  public class HttpContextBase: IServiceProvider  
    8.  {  
    9.     //其他成员  
    10.     public void SetSessionStateBehavior(SessionStateBehavior sessionStateBehavior);  

    三、ControllerBuilder

    用于激活Controller对象的ControllerFactory最终通过ControllerBuilder注册到ASP.NET MVC应用中。如下面的代码所示,ControllerBuilder定义了一个静态只读属性Current返回当前ControllerBuilder对象,这是针对整个Web应用的全局对象。两个SetControllerFactory方法重载用于注册ControllerFactory的类型或者实例,而GetControllerFactory方法返回一个具体的ControllerFactory对象。

    1. public class ControllerBuilder  
    2.  
    3.     public IControllerFactory GetControllerFactory();  
    4.    public void SetControllerFactory(Type controllerFactoryType);  
    5.     public void SetControllerFactory(IControllerFactory controllerFactory);    
    6.     public HashSet<string> DefaultNamespaces { get; }  
    7.    public static ControllerBuilder Current { get; }  

    具体来说,如果我们是注册的ControllerFactory的类型,那么GetControllerFactory在执行的时候会通过对注册类型的反射(调用Activator的静态方法CreateInstance)来创建具体的ControllerFactory(系统不会对创建的Controller进行缓存);如果注册的是一个具体的ControllerFactory对象,该对象直接从GetControllerFactory返回。

    被ASP.NET路由系统进行拦截处理后会生成一个用于封装路由信息的RouteData对象

  • 上一篇资讯: 详细解读ASP.NET的异步
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号