前言
前面一篇讲解了Model元数据,Model元数据是在Model绑定中很重要的一部分,只是Model绑定中涉及的知识点比较多,对于ASP.NET MVC框架来说ASP.NET Web API框架中在Model绑定部分又新增了参数绑定这么一个机制,这些内容都会在后面的篇幅中说明,前面的这些篇幅都是讲解理论上的知识也没有涉及到示例的演示,这个大家不用急在最后Model部分的基础知识讲解完之后我会把前面所讲的全部串联起来,而今天这个篇幅给大家带来的就是在Model绑定中起到至关重要的一个环节,大家这个不用去管什么Model绑定,而是单纯的去了解ValueProvider这一系列的对象模型,因为在没有结合前后知识点串联起来之前,我们都不知道ValueProvider是在哪执行的。所以我们还是老老实实了解一下ValueProvider相关的对象吧。
Model-ValueProvider
图1
IValueProvider接口类型--ValueProvider行为约束
首先我们看一下图1中右边的部分,起头的就是一个IValueProvider接口类型,我们就来看一下接口的定义:
示例代码1-1
publicinterfaceIValueProvider boolContainsPrefix(stringprefix); ValueProviderResultGetValue(stringkey); |
我们在代码1-1中看到,IValueProvider接口中定义了两个方法,一个是ContainsPrefix()方法,接收string类型的参数并且返回的是bool值类型,这个方法表示的就是根据指定的前缀值查看当前的ValueProvider中是否存在这个前缀值,这个下面会有示例稍后再说,然后就是GetValue()方法,是根据执行的键值返回当中的对应的值,从这里一看我们就大概能猜到这个ValueProvider应该是类似于键值队一样的类型,而返回的结果被封装在了ValueProviderResult类型当中,这个类型稍后会有说明。在IValueProvider接口约束好ValueProvider值提供程序的行为后,我们应该就来看一看ValueProvider值提供程序的基础结构了。不过呢在此之前我们还是要根据图1中所示的那样,先来看一下IEnumerableValueProvider接口类型的定义,这个接口主要负责什么呢?
IEnumerableValueProvider接口类型-ValueProvider行为约束
示例代码1-2
publicinterfaceIEnumerableValueProvider:IValueProvider IDictionary< string , string >GetKeysFromPrefix(stringprefix); |
从代码1-2中可以很清楚明了的看到IEnumerableValueProvider接口类型的职责很简单,就是对指定的前缀值进行检索,并且最后以键值队的形式返回,这个在下面会有示例详细说明。
NameValuePairsValueProvider类型-ValueProvider基础结构
示例代码1-3
publicclassNameValuePairsValueProvider:IEnumerableValueProvider,IValueProvider publicNameValuePairsValueProvider(Func<IEnumerable<KeyValuePair< string , string >>>valuesFactory,CultureInfoculture); publicNameValuePairsValueProvider(IEnumerable<KeyValuePair< string , string >>values,CultureInfoculture); publicvirtualboolContainsPrefix(stringprefix); publicvirtualIDictionary< string , string >GetKeysFromPrefix(stringprefix); publicvirtualValueProviderResultGetValue(stringkey); |
在代码1-3中我们看到NameValuePairsValueProvider类型的定义,首先就说说它的构造函数吧,两个构造函数的区别在于第一个是Func<IEnumerable<KeyValuePair<string, string>>>类型的构造函数参数,第二个是IEnumerable<KeyValuePair<string, string>>类型的构造函数参数,第二个构造函数的首个参数类型实际就是第一个构造函数首个参数的返回类型,这里大家都看得到,其实在内部实现,也是这样的声明第一个构造函数是没什么的,声明第二个构造函数的时候其实就把参数再次封装为委托。
对于KeyValuePair<T,U>类型可以理解为键值队的子项,在它的类型中只有一个键值对应一个值只有一项就是它本身。
至于剩下的三个方法我们还是靠简单的示例来说明一下。
示例代码1-4
publicclassValueProviderCaseController:ApiController publicstringGet() KeyValuePair< string , string >[]dictionary=newKeyValuePair< string , string >[] newKeyValuePair< string , string >( "EmployeesInfo.Name" , "Jinyuan" ), newKeyValuePair< string , string >( "EmployeesInfo.Age" , "24" ), newKeyValuePair< string 数据库学习之--Linux下Mysql源码包安装 阅读原文» 数据库学习之--Linux下Mysql源码包安装 系统环境: 操作系统:RedHat EL6 DB Soft: Mysql 5.6.4-m7 Mysql 在linux下的安装方式有两种版本,一种为Binary(二进制),另外一种为Source(源码包),本文为Source Install方式。 1、安装前的准备 解压安装包 [oracle@ogg ~]$ ls
[oracle@ogg ~]$ cd mysql-5.6.4-m7
[oracle@ogg mysql-5.6.4-m7]$ tar zxvf mysql-5.6.4-m7.tar.gz
查看官方安装文档:INSTALL-SOURCE To install and use a MySQL binary distribution, the basic command sequence looks like this:
For example, with a compressed tarfile source distribution on Unix, the basic installation command sequence looks like this:
|
没有评论:
发表评论