namespace System.Web.Mvc { using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; public class ModelValidatorProviderCollection : Collection { private IResolver> _serviceResolver; public ModelValidatorProviderCollection() { _serviceResolver = new MultiServiceResolver(() => Items); } public ModelValidatorProviderCollection(IList list) : base(list) { _serviceResolver = new MultiServiceResolver(() => Items); } internal ModelValidatorProviderCollection(IResolver> serviceResolver, params ModelValidatorProvider[] validatorProvidors) : base(validatorProvidors) { _serviceResolver = serviceResolver ?? new MultiServiceResolver( ()=>Items ); } private IEnumerable CombinedItems { get { return _serviceResolver.Current; } } protected override void InsertItem(int index, ModelValidatorProvider item) { if (item == null) { throw new ArgumentNullException("item"); } base.InsertItem(index, item); } protected override void SetItem(int index, ModelValidatorProvider item) { if (item == null) { throw new ArgumentNullException("item"); } base.SetItem(index, item); } public IEnumerable GetValidators(ModelMetadata metadata, ControllerContext context) { return CombinedItems.SelectMany(provider => provider.GetValidators(metadata, context)); } } }