asp.net mvc源码分析-Controller篇 ValueProvider

本文深入探讨了ASP.NET MVC Controller中的ValueProvider属性,解释了它是如何为Action参数提供值的。ValueProviderFactories默认包含了6个ProviderFactory,并且顺序至关重要。每个Factory根据不同的数据来源创建对应的ValueProvider,例如FormValueProvider、RouteDataValueProvider等。ValueProviderCollection的GetValue方法用于获取指定key的ValueProviderResult,通过遍历所有ValueProvider并返回第一个非空结果。

在上篇文章asp.net mvc源码分析-Action篇 IModelBinder中我们提到了ValueProvider,其实这个东西是Controller的属性,在写前面Controller的是曾打算把它写书来,后来有以下在后面用的时候在写它相关的东东吧,需求才能推动发展啊。先说明一下这个属性石很重要的,Action参数的值最总都是通过它来获取的。

   public IValueProvider ValueProvider {
            get {
                if (_valueProvider == null) {
                    _valueProvider = ValueProviderFactories.Factories.GetValueProvider(ControllerContext);
                }
                return _valueProvider;
            }
            set {
                _valueProvider = value;
            }
        }

想让我们看看ValueProviderFactories类是个什么东东

 public static class ValueProviderFactories {

        private static readonly ValueProviderFactoryCollection _factories = new ValueProviderFactoryCollection() {
            new ChildActionValueProviderFactory(),
            new FormValueProviderFactory(),
            new JsonValueProviderFactory(),
            new RouteDataValueProviderFactory(),
            new QueryStringValueProviderFactory(),
            new HttpFileCollectionValueProviderFactory(),

        };


        public static ValueProviderFactoryCollection Factories {
            get {
                return _factories;
            }
        }

    }

看来 默认就跟我们加了6个ProviderFactory啊,这个顺序很重要。

        public IValueProvider GetValueProvider(ControllerContext controllerContext) {
            var valueProviders = from factory in _serviceResolver.Current

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值