Use IndexOf (char)
[mono.git] / mcs / class / System.Web / System.Web.Configuration_2.0 / ProvidersHelper.cs
index 46a88eb1fef26d48f0b12c7f2e0df60fcccba413..e9b8dca4a8d064289ef8fbedfb5259ef09aa3db6 100644 (file)
 #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 {
 
@@ -41,16 +47,39 @@ namespace System.Web.Configuration {
        {
                public static ProviderBase InstantiateProvider (ProviderSettings providerSettings, Type providerType)
                {
-                       Type settingsType = Type.GetType (providerSettings.Type);
+                       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));
+                               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));
+                               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);
+                       NameValueCollection col = new NameValueCollection (providerSettings.Parameters);
+                       provider.Initialize (providerSettings.Name, col);
 
                        return provider;
                }