1 /********************************************************
\r
2 * ADO.NET 2.0 Data Provider for SQLite Version 3.X
\r
3 * Written by Robert Simpson (robert@blackcastlesoft.com)
\r
5 * Released to the public domain, use at your own risk!
\r
6 ********************************************************/
\r
8 namespace Mono.Data.Sqlite
\r
11 using System.Data.Common;
\r
12 using System.Reflection;
\r
13 using System.Security.Permissions;
\r
16 /// SQLite implementation of DbProviderFactory.
\r
18 public sealed partial class SQLiteFactory : IServiceProvider
\r
20 private static Type _dbProviderServicesType;
\r
21 private static object _sqliteServices;
\r
23 static SQLiteFactory()
\r
25 _dbProviderServicesType = Type.GetType("System.Data.Common.DbProviderServices, System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", false);
\r
29 /// Will provide a DbProviderServices object in .NET 3.5
\r
31 /// <param name="serviceType">The class or interface type to query for</param>
\r
32 /// <returns></returns>
\r
33 object IServiceProvider.GetService(Type serviceType)
\r
35 if (serviceType == typeof(ISQLiteSchemaExtensions) ||
\r
36 (_dbProviderServicesType != null && serviceType == _dbProviderServicesType))
\r
38 return GetSQLiteProviderServicesInstance();
\r
43 [ReflectionPermission(SecurityAction.Assert, MemberAccess = true)]
\r
44 private object GetSQLiteProviderServicesInstance()
\r
46 if (_sqliteServices == null)
\r
48 Type type = Type.GetType("Mono.Data.Sqlite.SQLiteProviderServices, Mono.Data.Sqlite.Linq, Version=2.0.38.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139", false);
\r
51 FieldInfo field = type.GetField("Instance", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
\r
52 _sqliteServices = field.GetValue(null);
\r
55 return _sqliteServices;
\r