知识大全 ASP.NET MVC 4框架揭秘:CBuilder(1)[1]

Posted 空间

篇首语:弱龄寄事外,委怀在琴书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET MVC 4框架揭秘:CBuilder(1)[1]相关的知识,希望对你有一定的参考价值。

ASP.NET MVC 4框架揭秘:CBuilder(1)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

     ControllerBuilder( )

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

  public class ControllerBuilder

  

  public IControllerFactory GetControllerFactory()

  public void SetControllerFactory(Type controllerFactoryType)

  public void SetControllerFactory(IControllerFactory controllerFactory)

  public HashSet<string>          DefaultNamespaces get;

  public static ControllerBuilder     Current get;

  

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

  通过第 章 URL路由 的介绍我们知道 被ASP NET路由系统进行拦截处理后会生成一个用于封装路由信息的RouteData对象 而目标Controller的名称就包含在通过该RouteData的Values属性表示的RouteValueDictionary对象中 对应的Key为 controller 而在默认的情况下 这个作为路由数据的名称只能帮助我们解析出Controller的类型名称 如果在不同的命名空间下定义了多个同名的Controller类 会导致激活系统无法确定具体的Controller的类型从而抛出异常

  为了解决这个问题 我们必须为定义了同名Controller类型的命名空间设置不同的优先级 具体来说有两种提升命名空间优先级的方式 第一种方式就是在调用RouteCollection如下所示的扩展方法MapRoute时指定一个命名空间的列表 通过第 章 URL路由 的介绍我们知道 通过这种方式指定的命名空间列表会保存在Route对象的DataTokens属性表示的RouteValueDictionary字典中 对应的Key为 Namespaces

  public static class RouteCollectionExtensions

  

  //其他成员

  public static Route MapRoute(this RouteCollection routes string name

  string url string[] namespaces)

  public static Route MapRoute(this RouteCollection routes string name

  string url object defaults string[] namespaces)

  public static Route MapRoute(this RouteCollection routes string name

  string url object defaults object constraints string[] namespaces)

  

  另一种提升命名空间优先级的方式就是将其添加到当前的ControllerBuilder中的默认命名空间列表中 从上面的给出的ControllerBuilder的定义可以看出 它具有一个HashSet<string>类型的只读属性DefaultNamespaces代表了这么一个默认命名空间列表 对于这两种不同的命名空间优先级提升方式 前者(通过路由注册)指定命名空间具有更高的优先级

  实例演示 如何提升命名空间的优先级(S S S )

cha138/Article/program/net/201311/16094

相关参考

知识大全 ASP.NET MVC 4框架揭秘:总体设计

ASP.NETMVC4框架揭秘:总体设计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  第章&n

知识大全 ASP.NET MVC 4框架揭秘:ControllerFactory[2]

ASP.NETMVC4框架揭秘:ControllerFactory[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们

知识大全 ASP.NET MVC 4框架揭秘:ControllerFactory[1]

ASP.NETMVC4框架揭秘:ControllerFactory[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们

知识大全 ASP.NET MVC 4框架揭秘:Controller(1)

ASP.NETMVC4框架揭秘:Controller(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ASP.NET MVC 4框架揭秘:Controller(3)

ASP.NETMVC4框架揭秘:Controller(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ASP.NET MVC 4框架揭秘:Controller(2)[2]

ASP.NETMVC4框架揭秘:Controller(2)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 ASP.NET MVC 4框架揭秘:Controller(2)[1]

ASP.NETMVC4框架揭秘:Controller(2)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 ASP.NET MVC 4框架揭秘:CBuilder(1)[2]

ASP.NETMVC4框架揭秘:CBuilder(1)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 ASP.NET MVC 4框架揭秘:CBuilder(2)[2]

ASP.NETMVC4框架揭秘:CBuilder(2)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看