namespace System.Web.Mvc { using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; public class ValueProviderFactoryCollection : Collection { private IResolver> _serviceResolver; public ValueProviderFactoryCollection() { _serviceResolver = new MultiServiceResolver(() => Items); } public ValueProviderFactoryCollection(IList list) : base(list) { _serviceResolver = new MultiServiceResolver(() => Items); } internal ValueProviderFactoryCollection(IResolver> serviceResolver, params ValueProviderFactory[] valueProviderFactories) : base(valueProviderFactories) { _serviceResolver = serviceResolver ?? new MultiServiceResolver( () => Items ); } public IValueProvider GetValueProvider(ControllerContext controllerContext) { var valueProviders = from factory in _serviceResolver.Current let valueProvider = factory.GetValueProvider(controllerContext) where valueProvider != null select valueProvider; return new ValueProviderCollection(valueProviders.ToList()); } protected override void InsertItem(int index, ValueProviderFactory item) { if (item == null) { throw new ArgumentNullException("item"); } base.InsertItem(index, item); } protected override void SetItem(int index, ValueProviderFactory item) { if (item == null) { throw new ArgumentNullException("item"); } base.SetItem(index, item); } } }