fc649ec2b41fb190af854265cea94ab306cbd27d
[mono.git] / mcs / class / Mono.Data.Sqlite / Mono.Data.Sqlite_2.0 / LINQ / SQLiteFactory_Linq.cs
1 /********************************************************\r
2  * ADO.NET 2.0 Data Provider for SQLite Version 3.X\r
3  * Written by Robert Simpson (robert@blackcastlesoft.com)\r
4  * \r
5  * Released to the public domain, use at your own risk!\r
6  ********************************************************/\r
7 \r
8 namespace Mono.Data.Sqlite\r
9 {\r
10   using System;\r
11   using System.Data.Common;\r
12   using System.Reflection;\r
13   using System.Security.Permissions;\r
14 \r
15   /// <summary>\r
16   /// SQLite implementation of DbProviderFactory.\r
17   /// </summary>\r
18   public sealed partial class SQLiteFactory : IServiceProvider\r
19   {\r
20     private static Type _dbProviderServicesType;\r
21     private static object _sqliteServices;\r
22 \r
23     static SQLiteFactory()\r
24     {\r
25       _dbProviderServicesType = Type.GetType("System.Data.Common.DbProviderServices, System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", false);\r
26     }\r
27 \r
28     /// <summary>\r
29     /// Will provide a DbProviderServices object in .NET 3.5\r
30     /// </summary>\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
34     {\r
35       if (serviceType == typeof(ISQLiteSchemaExtensions) ||\r
36         (_dbProviderServicesType != null && serviceType == _dbProviderServicesType))\r
37       {\r
38         return GetSQLiteProviderServicesInstance();\r
39       }\r
40       return null;\r
41     }\r
42 \r
43     [ReflectionPermission(SecurityAction.Assert, MemberAccess = true)]\r
44     private object GetSQLiteProviderServicesInstance()\r
45     {\r
46       if (_sqliteServices == null)\r
47       {\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
49         if (type != null)\r
50         {\r
51           FieldInfo field = type.GetField("Instance", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);\r
52           _sqliteServices = field.GetValue(null);\r
53         }\r
54       }\r
55       return _sqliteServices;\r
56     }\r
57   }\r
58 }\r