每次http请求的各种数据(表单数据、url的数据、路由数据等等)都保存在不同的IValueProvider接口的实现类中。
而IValueProvider接口的实现类是通过ValueProviderFactory创建的。
在mvc中原生的ValueProviderFactory有六种:
- ChildActionValueProviderFactory:根据给定的Controller上下文创建一个ChildActionValueProvider对象。
- FormValueProviderFactory:根据给定的Controller上下文创建一个FormValueProvider对象。
- JsonValueProviderFactory:将以JSON形式表示的请求数据转换成一个Dictionary<string, object>对象,并最终创建一个DictionaryValueProvider<object>对象。
- RouteDataValueProviderFactory:根据给定的Controller上下文创建一个RouteDataValueProvider对象。
- QueryStringValueProviderFactory:根据给定的Controller上下文创建一个QueryStringValueProvider对象。
- HttpFileCollectionValueProviderFactory:根据给定的Controller上下文创建一个HttpFileCollectionValueProvider对象。
ValueProviderFactory需要注册到ValueProviderFactories的静态属性Factories中,才能被使用。
class ValueProviderFactories
2: {
static ValueProviderFactoryCollection Factories { get; }
4: }
class ValueProviderFactoryCollection : Collection<ValueProviderFactory>
7: {
public ValueProviderFactoryCollection();
public ValueProviderFactoryCollection(IList<ValueProviderFactory> list);
public IValueProvider GetValueProvider(ControllerContext controllerContext);
11: }
系统首先通过ValueProviderCollection就是值提供器集合。
class ValueProviderCollection : Collection<IValueProvider>, IUnvalidatedValueProvider, IEnumerableValueProvider, IValueProvider
2: {
public ValueProviderCollection();
public ValueProviderCollection(IList<IValueProvider> list);
string prefix);
string prefix);
string key);
bool skipValidation);
10: }