每次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: }

相关文章:

  • 2021-08-16
  • 2022-02-04
  • 2022-02-02
  • 2021-08-04
  • 2021-12-09
  • 2022-12-23
  • 2021-05-02
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-09-15
  • 2021-09-23
  • 2021-07-23
  • 2021-08-21
  • 2022-12-23
相关资源
相似解决方案