Преглед изворни кода

2008-06-18 Ivan N. Zlatev <[email protected]>

	* ServiceContainer.cs: Lazy initialize the services hashtable so that 
	we handle disposed state on 2.0 nicely.


svn path=/trunk/mcs/; revision=106142
Ivan Zlatev пре 17 година
родитељ
комит
b6af407bcb

+ 5 - 0
mcs/class/System/System.ComponentModel.Design/Changelog

@@ -1,3 +1,8 @@
+2008-06-18  Ivan N. Zlatev  <[email protected]>
+
+	* ServiceContainer.cs: Lazy initialize the services hashtable so that 
+	we handle disposed state on 2.0 nicely.
+
 2008-06-07  Gert Driesen  <[email protected]>
 
 	* ServiceContainer.cs: In AddService, first check parent and end flow

+ 17 - 8
mcs/class/System/System.ComponentModel.Design/ServiceContainer.cs

@@ -43,7 +43,7 @@ namespace System.ComponentModel.Design
 #endif
 	{
 		private IServiceProvider parentProvider;
-		private Hashtable services = new Hashtable ();
+		private Hashtable services;
 #if NET_2_0
 		private bool _disposed;
 #endif
@@ -53,6 +53,14 @@ namespace System.ComponentModel.Design
 		{
 		}
 
+		private Hashtable Services {
+			get {
+				if (services == null)
+					services = new Hashtable ();
+				return services;
+			}
+		}
+
 		public ServiceContainer (IServiceProvider parentProvider)
 		{
 			this.parentProvider = parentProvider;
@@ -88,11 +96,11 @@ namespace System.ComponentModel.Design
 				throw new ArgumentNullException ("serviceType");
 			if (serviceInstance == null)
 				throw new ArgumentNullException ("serviceInstance");
-			if (services.Contains (serviceType))
+			if (Services.Contains (serviceType))
 				throw new ArgumentException (string.Format (
 					"The service {0} already exists in the service container.",
 					serviceType.ToString ()), "serviceType");
-			services.Add (serviceType, serviceInstance);
+			Services.Add (serviceType, serviceInstance);
 		}
 
 #if NET_2_0
@@ -115,11 +123,11 @@ namespace System.ComponentModel.Design
 				throw new ArgumentNullException ("serviceType");
 			if (callback == null)
 				throw new ArgumentNullException ("callback");
-			if (services.Contains (serviceType))
+			if (Services.Contains (serviceType))
 				throw new ArgumentException (string.Format (
 					"The service {0} already exists in the service container.",
 					serviceType.ToString ()), "serviceType");
-			services.Add (serviceType, callback);
+			Services.Add (serviceType, callback);
 		}
 
 		public void RemoveService (Type serviceType)
@@ -142,7 +150,7 @@ namespace System.ComponentModel.Design
 
 			if (serviceType == null)
 				throw new ArgumentNullException ("serviceType");
-			services.Remove (serviceType);
+			Services.Remove (serviceType);
 		}
 
 #if NET_2_0
@@ -161,15 +169,16 @@ namespace System.ComponentModel.Design
 					break;
 				}
 			}
+
 			if (result == null)
-				result = services [serviceType];
+				result = Services [serviceType];
 			if (result == null && parentProvider != null)
 				result = parentProvider.GetService (serviceType);
 			if (result != null) {
 				ServiceCreatorCallback cb = result as ServiceCreatorCallback;
 				if (cb != null) {
 					result = cb (this, serviceType);
-					services [serviceType] = result;
+					Services [serviceType] = result;
 				}
 			}
 			return result;