public IDataProvider GetDataProvider(string connectionString) { Load(connectionString); return(ProviderHelper.GetDataProvider(Provider.ProviderName, connectionString)); }
public void Load(string connectionString) { if (IsLoaded) { return; } if (LoadException != null) { return; } try { var loadLibraries = (Provider.ProviderLibraries?.Split(';') ?? Array <string> .Empty) .Where(l => !string.IsNullOrEmpty(l)) .Select(l => { try { return(Assembly.Load(Path.GetFileNameWithoutExtension(l))); } catch (Exception e) { Debug.WriteLine(e.Message); return(null); } } ) .Where(l => l != null); var providerLibraries = loadLibraries .Concat(new[] { typeof(DataConnection).Assembly }) .ToArray(); var typeName = Provider.InitalizationClassName; if (!string.IsNullOrEmpty(typeName)) { var initType = Type.GetType(typeName, true); RuntimeHelpers.RunClassConstructor(initType.TypeHandle); } var provider = ProviderHelper.GetDataProvider(Provider.ProviderName, connectionString); var connectionAssemblies = new List <Assembly> { provider.GetType().Assembly }; try { using (var connection = provider.CreateConnection(connectionString)) { connectionAssemblies.Add(connection.GetType().Assembly); } } catch { } LoadedAssemblies = connectionAssemblies .Concat(providerLibraries) .Distinct().ToArray(); IsLoaded = true; } catch (Exception e) { LoadException = e; IsLoaded = false; } }