知识大全 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.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)小编为大家搜集整理后发布的内容,让我们赶快一起来看