Merge pull request #485 from mtausig/master
[mono.git] / mcs / class / System.Web.Mvc3 / Mvc / ModelValidatorProviderCollection.cs
1 namespace System.Web.Mvc {
2     using System;
3     using System.Collections.Generic;
4     using System.Collections.ObjectModel;
5     using System.Linq;
6
7     public class ModelValidatorProviderCollection : Collection<ModelValidatorProvider> {
8         private IResolver<IEnumerable<ModelValidatorProvider>> _serviceResolver;
9
10         public ModelValidatorProviderCollection() {
11             _serviceResolver = new MultiServiceResolver<ModelValidatorProvider>(() => Items);
12         }
13
14         public ModelValidatorProviderCollection(IList<ModelValidatorProvider> list)
15             : base(list) {
16             _serviceResolver = new MultiServiceResolver<ModelValidatorProvider>(() => Items);
17         }
18
19         internal ModelValidatorProviderCollection(IResolver<IEnumerable<ModelValidatorProvider>> serviceResolver, params ModelValidatorProvider[] validatorProvidors)
20             : base(validatorProvidors) {
21             _serviceResolver = serviceResolver ??  new MultiServiceResolver<ModelValidatorProvider>(
22                 ()=>Items
23                 );
24         }
25
26         private IEnumerable<ModelValidatorProvider> CombinedItems {
27             get {
28                 return _serviceResolver.Current;
29             }
30         }
31
32         protected override void InsertItem(int index, ModelValidatorProvider item) {
33             if (item == null) {
34                 throw new ArgumentNullException("item");
35             }
36             base.InsertItem(index, item);
37         }
38
39         protected override void SetItem(int index, ModelValidatorProvider item) {
40             if (item == null) {
41                 throw new ArgumentNullException("item");
42             }
43             base.SetItem(index, item);
44         }
45
46         public IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context) {
47             return CombinedItems.SelectMany(provider => provider.GetValidators(metadata, context));
48         }
49
50     }
51 }