Use IndexOf (char)
[mono.git] / mcs / class / System.Web / System.Web.Configuration_2.0 / ProvidersHelper.cs
index 2c1e74fda32c596e8836708210fd6720cb5e048b..e9b8dca4a8d064289ef8fbedfb5259ef09aa3db6 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;
+using System.Web.Compilation;
+using System.Collections.Specialized;
+
+namespace System.Web.Configuration {
+
+       public static class ProvidersHelper
+       {
+               public static ProviderBase InstantiateProvider (ProviderSettings providerSettings, Type providerType)
+               {
+                       Type settingsType = HttpApplication.LoadType (providerSettings.Type);
+                       
+                       if (settingsType == null)
+                               settingsType = HttpApplication.LoadTypeFromBin (providerSettings.Type);
+
+                       // 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;
+
+                       NameValueCollection col = new NameValueCollection (providerSettings.Parameters);
+                       provider.Initialize (providerSettings.Name, col);
+
+                       return provider;
+               }
+
+               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
+