|
2 | 2 | // The .NET Foundation licenses this file to you under the MIT license.
|
3 | 3 | // See the LICENSE file in the project root for more information.
|
4 | 4 |
|
| 5 | +using System.Data.Common; |
5 | 6 | using Microsoft.Data.Sql;
|
| 7 | + |
| 8 | +#if NETFRAMEWORK |
6 | 9 | using System;
|
7 |
| -using System.Data.Common; |
| 10 | +using System.Reflection; |
8 | 11 | using System.Security.Permissions;
|
9 | 12 | using System.Security;
|
10 |
| -using Microsoft.Data.Common; |
| 13 | +#endif |
11 | 14 |
|
12 | 15 | namespace Microsoft.Data.SqlClient
|
13 | 16 | {
|
14 | 17 | /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/SqlClientFactory/*'/>
|
| 18 | + #if NETFRAMEWORK |
| 19 | + public sealed class SqlClientFactory : DbProviderFactory, IServiceProvider |
| 20 | + #else |
15 | 21 | public sealed class SqlClientFactory : DbProviderFactory
|
16 |
| -#if NETFRAMEWORK |
17 |
| - , IServiceProvider |
18 |
| -#endif |
| 22 | + #endif |
19 | 23 | {
|
| 24 | + #if NETFRAMEWORK |
| 25 | + #region Constants / Member Variables |
| 26 | + |
| 27 | + private const string ExtensionAssemblyRef = |
| 28 | + "System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=" + AssemblyRef.EcmaPublicKey; |
| 29 | + |
| 30 | + private const string MicrosoftDataSqlClientSqlProviderServicesTypeName = |
| 31 | + "Microsoft.Data.SqlClient.SQLProviderServices, " + ExtensionAssemblyRef; |
| 32 | + |
| 33 | + private const string SystemDataCommonDbProviderServicesTypeName = |
| 34 | + "System.Data.Common.DbProviderServices, " + ExtensionAssemblyRef; |
20 | 35 |
|
| 36 | + private static readonly Lazy<object> MicrosoftDataSqlClientProviderServicesInstance = |
| 37 | + new(static () => |
| 38 | + { |
| 39 | + FieldInfo instanceFieldInfo = MicrosoftDataSqlClientSqlProviderServicesType.Value?.GetField( |
| 40 | + "Instance", |
| 41 | + BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static); |
| 42 | + return instanceFieldInfo?.GetValue(null); |
| 43 | + }); |
| 44 | + |
| 45 | + private static readonly Lazy<Type> MicrosoftDataSqlClientSqlProviderServicesType = |
| 46 | + new (static () => Type.GetType(MicrosoftDataSqlClientSqlProviderServicesTypeName, throwOnError: false)); |
| 47 | + |
| 48 | + private static readonly Lazy<Type> SystemDataCommonDbProviderServicesType = |
| 49 | + new(static () => Type.GetType(SystemDataCommonDbProviderServicesTypeName, throwOnError: false)); |
| 50 | + |
| 51 | + #endregion |
| 52 | + #endif |
| 53 | + |
21 | 54 | /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/Instance/*'/>
|
22 | 55 | public static readonly SqlClientFactory Instance = new SqlClientFactory();
|
23 | 56 |
|
24 | 57 | private SqlClientFactory()
|
25 | 58 | {
|
26 | 59 | }
|
| 60 | + |
| 61 | + #if NET |
| 62 | + /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/CanCreateBatch/*'/> |
| 63 | + public override bool CanCreateBatch => true; |
| 64 | + |
| 65 | + /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/CreateBatch/*'/> |
| 66 | + public override DbBatch CreateBatch() => new SqlBatch(); |
| 67 | + |
| 68 | + /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/CreateBatchCommand/*'/> |
| 69 | + public override DbBatchCommand CreateBatchCommand() => new SqlBatchCommand(); |
| 70 | + #endif |
27 | 71 |
|
28 | 72 | /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/CanCreateDataSourceEnumerator/*'/>
|
29 | 73 | public override bool CanCreateDataSourceEnumerator => true;
|
@@ -64,45 +108,28 @@ public override DbParameter CreateParameter()
|
64 | 108 | return new SqlParameter();
|
65 | 109 | }
|
66 | 110 |
|
67 |
| -#if NETFRAMEWORK |
| 111 | + #if NETFRAMEWORK |
68 | 112 | /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/CreatePermission/*'/>
|
69 | 113 | public override CodeAccessPermission CreatePermission(PermissionState state)
|
70 | 114 | {
|
71 | 115 | return new SqlClientPermission(state);
|
72 | 116 | }
|
73 | 117 |
|
74 | 118 | /// <summary>
|
75 |
| - /// Extension mechanism for additional services; currently the only service |
76 |
| - /// supported is the DbProviderServices |
| 119 | + /// Extension mechanism for additional services; currently the only service supported is |
| 120 | + /// the <c>System.Data.Common.DbProviderServices</c> type. |
77 | 121 | /// </summary>
|
78 |
| - /// <returns>requested service provider or null.</returns> |
79 |
| - object IServiceProvider.GetService(Type serviceType) |
80 |
| - { |
81 |
| - object result = null; |
82 |
| - if (serviceType == GreenMethods.SystemDataCommonDbProviderServices_Type) |
83 |
| - { |
84 |
| - result = GreenMethods.MicrosoftDataSqlClientSqlProviderServices_Instance(); |
85 |
| - } |
86 |
| - return result; |
87 |
| - } |
88 |
| -#endif |
| 122 | + /// <returns>Requested service provider or <c>null</c>.</returns> |
| 123 | + object IServiceProvider.GetService(Type serviceType) => |
| 124 | + serviceType == SystemDataCommonDbProviderServicesType.Value |
| 125 | + ? MicrosoftDataSqlClientProviderServicesInstance.Value |
| 126 | + : null; |
| 127 | + #endif |
89 | 128 |
|
90 | 129 | /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/CreateDataSourceEnumerator/*'/>
|
91 | 130 | public override DbDataSourceEnumerator CreateDataSourceEnumerator()
|
92 | 131 | {
|
93 | 132 | return SqlDataSourceEnumerator.Instance;
|
94 | 133 | }
|
95 |
| - |
96 |
| -#if NET |
97 |
| - /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/CanCreateBatch/*'/> |
98 |
| - public override bool CanCreateBatch => true; |
99 |
| - |
100 |
| - /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/CreateBatch/*'/> |
101 |
| - public override DbBatch CreateBatch() => new SqlBatch(); |
102 |
| - |
103 |
| - /// <include file='../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientFactory.xml' path='docs/members[@name="SqlClientFactory"]/CreateBatchCommand/*'/> |
104 |
| - public override DbBatchCommand CreateBatchCommand() => new SqlBatchCommand(); |
105 |
| -#endif |
106 |
| - |
107 | 134 | }
|
108 | 135 | }
|
0 commit comments