2 // DynamicModuleManager.cs: Manager for dynamic Http Modules.
5 // Matthias Bogad (bogad@cs.tum.edu)
11 using System.Collections.Generic;
13 namespace System.Web {
14 sealed class DynamicModuleManager {
15 const string moduleNameFormat = "__Module__{0}_{1}";
17 readonly List<DynamicModuleInfo> entries = new List<DynamicModuleInfo> ();
18 bool entriesAreReadOnly = false;
19 readonly object mutex = new object ();
21 public void Add (Type moduleType)
23 if (moduleType == null)
24 throw new ArgumentException ("moduleType");
26 if (!typeof (IHttpModule).IsAssignableFrom (moduleType))
27 throw new ArgumentException ("Given object does not implement IHttpModule.", "moduleType");
30 if (entriesAreReadOnly)
31 throw new InvalidOperationException ("A module was to be added to the dynamic module list, but the list was already initialized. The dynamic module list can only be initialized once.");
33 entries.Add (new DynamicModuleInfo (moduleType,
34 string.Format (moduleNameFormat, moduleType.AssemblyQualifiedName, Guid.NewGuid ())));
38 public ICollection<DynamicModuleInfo> LockAndGetModules ()
41 entriesAreReadOnly = true;
47 struct DynamicModuleInfo {
48 public readonly string Name;
49 public readonly Type Type;
51 public DynamicModuleInfo (Type type, string name)