2007-03-12 Marek Habersack <mhabersack@novell.com>
authorMarek Habersack <grendel@twistedcode.net>
Mon, 12 Mar 2007 11:28:02 +0000 (11:28 -0000)
committerMarek Habersack <grendel@twistedcode.net>
Mon, 12 Mar 2007 11:28:02 +0000 (11:28 -0000)
* ProvidersHelper.cs: support loading custom providers from
App_Code assemblies. Fixes bug #81071.
Also set eol-style to native.

svn path=/trunk/mcs/; revision=74112

mcs/class/System.Web/System.Web.Configuration_2.0/ChangeLog
mcs/class/System.Web/System.Web.Configuration_2.0/ProvidersHelper.cs

index 418af8df25ea21571be9afdebaf45ec7b345b3da..e1d924b8b5bfc9864870e5dcd5e3aa9d5cacebac 100644 (file)
@@ -1,3 +1,9 @@
+2007-03-12  Marek Habersack  <mhabersack@novell.com>
+
+       * ProvidersHelper.cs: support loading custom providers from
+       App_Code assemblies. Fixes bug #81071.
+       Also set eol-style to native.
+
 2007-03-08  Gert Driesen  <drieseng@users.souceforge.net>
 
        * PagesSection.cs: Revert part of Adar's patch that regresses
index 2c1e74fda32c596e8836708210fd6720cb5e048b..8b729bd9e21423f1aba55e249052405507bc6b38 100644 (file)
-//\r
-// System.Web.Configuration.ProvidersHelper\r
-//\r
-// Authors:\r
-//     Chris Toshok (toshok@ximian.com)\r
-//\r
-// (C) 2005 Novell, Inc (http://www.novell.com)\r
-//\r
-\r
-//\r
-// Permission is hereby granted, free of charge, to any person obtaining\r
-// a copy of this software and associated documentation files (the\r
-// "Software"), to deal in the Software without restriction, including\r
-// without limitation the rights to use, copy, modify, merge, publish,\r
-// distribute, sublicense, and/or sell copies of the Software, and to\r
-// permit persons to whom the Software is furnished to do so, subject to\r
-// the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be\r
-// included in all copies or substantial portions of the Software.\r
-// \r
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-\r
-#if NET_2_0\r
-\r
-using System;\r
-using System.Configuration;\r
-using System.Configuration.Provider;\r
-using System.Data.Common;\r
-using System.Data.SqlClient;\r
-using System.IO;\r
-using System.Reflection;\r
-\r
-namespace System.Web.Configuration {\r
-\r
-       public static class ProvidersHelper\r
-       {\r
-               private static string privateBinPath = null;\r
-               \r
-               public static ProviderBase InstantiateProvider (ProviderSettings providerSettings, Type providerType)\r
-               {\r
-                       Type settingsType = Type.GetType (providerSettings.Type);\r
-                       if (settingsType == null && Directory.Exists (PrivateBinPath)) {\r
-                               string [] binDlls = Directory.GetFiles (PrivateBinPath, "*.dll");\r
-                               foreach (string s in binDlls) {\r
-                                       Assembly binA = Assembly.LoadFrom (s);\r
-                                       settingsType = binA.GetType (providerSettings.Type);\r
-                                       if (settingsType != null)\r
-                                               break;\r
-                               }\r
-                       }\r
-\r
-                       if (settingsType == null)\r
-                               throw new ConfigurationErrorsException (String.Format ("Could not find type: {0}", providerSettings.Type));\r
-                       if (!providerType.IsAssignableFrom (settingsType))\r
-                               throw new ConfigurationErrorsException (String.Format ("Provider '{0}' must subclass from '{1}'", providerSettings.Name, providerType));\r
-\r
-                       ProviderBase provider = Activator.CreateInstance (settingsType) as ProviderBase;\r
-\r
-                       provider.Initialize (providerSettings.Name, providerSettings.Parameters);\r
-\r
-                       return provider;\r
-               }\r
-\r
-               private static string PrivateBinPath {\r
-                       get {\r
-                               if (privateBinPath != null)\r
-                                       return privateBinPath;\r
-\r
-                               AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;\r
-                               privateBinPath = Path.Combine (setup.ApplicationBase, setup.PrivateBinPath);\r
-\r
-                               return privateBinPath;\r
-                       }\r
-               }\r
-\r
-               public static void InstantiateProviders (ProviderSettingsCollection configProviders, ProviderCollection providers, Type providerType)\r
-               {\r
-                       if (!typeof (ProviderBase).IsAssignableFrom (providerType))\r
-                               throw new ConfigurationErrorsException (String.Format ("type '{0}' must subclass from ProviderBase", providerType));\r
-\r
-                       foreach (ProviderSettings settings in configProviders)\r
-                               providers.Add (InstantiateProvider (settings, providerType));\r
-               }\r
-\r
-               internal static DbProviderFactory GetDbProviderFactory (string providerName)\r
-               {\r
-                       DbProviderFactory f = null;\r
-\r
-                       if (providerName != null && providerName != "") {\r
-                               try {\r
-                                       f = DbProviderFactories.GetFactory(providerName);\r
-                               }\r
-                               catch (Exception e) { Console.WriteLine (e); /* nada */ }\r
-                               if (f != null)\r
-                                       return f;\r
-                       }\r
-\r
-                       return SqlClientFactory.Instance;\r
-               }\r
-       }\r
-\r
-}\r
-\r
-#endif\r
-\r
+//
+// System.Web.Configuration.ProvidersHelper
+//
+// Authors:
+//     Chris Toshok (toshok@ximian.com)
+//
+// (C) 2005 Novell, Inc (http://www.novell.com)
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+#if NET_2_0
+
+using System;
+using System.Collections;
+using System.Configuration;
+using System.Configuration.Provider;
+using System.Data.Common;
+using System.Data.SqlClient;
+using System.IO;
+using System.Reflection;
+using System.Web.Compilation;
+
+namespace System.Web.Configuration {
+
+       public static class ProvidersHelper
+       {
+               private static string privateBinPath = null;
+               
+               public static ProviderBase InstantiateProvider (ProviderSettings providerSettings, Type providerType)
+               {
+                       Type settingsType = Type.GetType (providerSettings.Type);
+                       if (settingsType == null && Directory.Exists (PrivateBinPath)) {
+                               string [] binDlls = Directory.GetFiles (PrivateBinPath, "*.dll");
+                               foreach (string s in binDlls) {
+                                       Assembly binA = Assembly.LoadFrom (s);
+                                       settingsType = binA.GetType (providerSettings.Type);
+                                       if (settingsType != null)
+                                               break;
+                               }
+                       }
+
+                       // check App_Code dlls
+                       if (settingsType == null) {
+                               IList appCode = BuildManager.CodeAssemblies;
+
+                               if (appCode != null && appCode.Count > 0) {
+                                       Assembly asm;
+                                       foreach (object o in appCode) {
+                                               asm = o as Assembly;
+                                               if (asm == null)
+                                                       continue;
+                                               settingsType = asm.GetType (providerSettings.Type);
+                                               if (settingsType != null)
+                                                       break;
+                                       }
+                               }
+                       }
+
+                       if (settingsType == null)
+                               throw new ConfigurationErrorsException (String.Format ("Could not find type: {0}",
+                                                                                      providerSettings.Type));
+                       if (!providerType.IsAssignableFrom (settingsType))
+                               throw new ConfigurationErrorsException (String.Format ("Provider '{0}' must subclass from '{1}'",
+                                                                                      providerSettings.Name, providerType));
+
+                       ProviderBase provider = Activator.CreateInstance (settingsType) as ProviderBase;
+
+                       provider.Initialize (providerSettings.Name, providerSettings.Parameters);
+
+                       return provider;
+               }
+
+               private static string PrivateBinPath {
+                       get {
+                               if (privateBinPath != null)
+                                       return privateBinPath;
+
+                               AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
+                               privateBinPath = Path.Combine (setup.ApplicationBase, setup.PrivateBinPath);
+
+                               return privateBinPath;
+                       }
+               }
+
+               public static void InstantiateProviders (ProviderSettingsCollection configProviders, ProviderCollection providers, Type providerType)
+               {
+                       if (!typeof (ProviderBase).IsAssignableFrom (providerType))
+                               throw new ConfigurationErrorsException (String.Format ("type '{0}' must subclass from ProviderBase", providerType));
+
+                       foreach (ProviderSettings settings in configProviders)
+                               providers.Add (InstantiateProvider (settings, providerType));
+               }
+
+               internal static DbProviderFactory GetDbProviderFactory (string providerName)
+               {
+                       DbProviderFactory f = null;
+
+                       if (providerName != null && providerName != "") {
+                               try {
+                                       f = DbProviderFactories.GetFactory(providerName);
+                               }
+                               catch (Exception e) { Console.WriteLine (e); /* nada */ }
+                               if (f != null)
+                                       return f;
+                       }
+
+                       return SqlClientFactory.Instance;
+               }
+       }
+
+}
+
+#endif
+