IServiceCollectionExtension.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using EVCB_OCPP.Domain.ConnectionFactory;
  2. using Microsoft.Data.SqlClient;
  3. using Microsoft.EntityFrameworkCore;
  4. using Microsoft.Extensions.Configuration;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using Microsoft.Extensions.Logging;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace EVCB_OCPP.Domain.Extensions;
  13. public static class IServiceCollectionExtension
  14. {
  15. public const string CommandTimeoutKey = "CommandTimeout";
  16. public const string MainDbUserIdKey = "MainDbUserIdKey";
  17. public const string MainDbPassKey = "MainDbPass";
  18. public const string MainDbConnectionStringKey = "MainDBContext";
  19. public const string MeterDbUserIdKey = "MeterValueDbUserId";
  20. public const string MeterDbPassKey = "MeterValueDbPass";
  21. public const string MeterDbConnectionStringKey = "MeterValueDBContext";
  22. public const string ConnectionLogDbUserIdKey = "ConnectionLogDbUserId";
  23. public const string ConnectionLogDbPassKey = "ConnectionLogDbPass";
  24. public const string ConnectionLogDbConnectionStringKey = "ConnectionLogDBContext";
  25. public const string WebDbUserIdKey = "WebDbUserId";
  26. public const string WebDbPassKey = "WebDbPass";
  27. public const string WebDbConnectionStringKey = "WebDBContext";
  28. public const string OnlineLogDbUserIdKey = "OnlineLogDbUserId";
  29. public const string OnlineLogDbPassKey = "OnlineLogDbPass";
  30. public const string OnlineLogDbConnectionStringKey = "OnlineLogDBContext";
  31. public const string ApiLogDbUserIdKey = "APILogDbUserId";
  32. public const string ApiLogDbPassKey = "APILogDbPass";
  33. public const string ApiLogDbConnectionStringKey = "APILogDBContext";
  34. public static IServiceCollection AddMainDbContext(this IServiceCollection services, IConfiguration configuration)
  35. {
  36. var conneciotnString = configuration.GetConnectionString(MainDbUserIdKey, MainDbPassKey, MainDbConnectionStringKey);
  37. services.AddSqlConnectionFactory<MainDBContext>(conneciotnString);
  38. AddPortalDbContextInternal<MainDBContext>(services, configuration, conneciotnString, logToConsole: false);
  39. return services;
  40. }
  41. public static IServiceCollection AddMeterValueDbContext(this IServiceCollection services, IConfiguration configuration)
  42. {
  43. var conneciotnString = configuration.GetConnectionString(MeterDbUserIdKey, MeterDbPassKey, MeterDbConnectionStringKey);
  44. services.AddSqlConnectionFactory<MeterValueDBContext>(conneciotnString);
  45. AddPortalDbContextInternal<MeterValueDBContext>(services, configuration, conneciotnString, logToConsole: false);
  46. return services;
  47. }
  48. public static IServiceCollection AddConnectionLogDbContext(this IServiceCollection services, IConfiguration configuration)
  49. {
  50. var conneciotnString = configuration.GetConnectionString(ConnectionLogDbUserIdKey, ConnectionLogDbPassKey, ConnectionLogDbConnectionStringKey);
  51. services.AddSqlConnectionFactory<ConnectionLogDBContext>(conneciotnString);
  52. AddPortalDbContextInternal<ConnectionLogDBContext>(services, configuration, conneciotnString, logToConsole: false);
  53. return services;
  54. }
  55. public static IServiceCollection AddWebDBConetext(this IServiceCollection services, IConfiguration configuration)
  56. {
  57. var conneciotnString = configuration.GetConnectionString(WebDbUserIdKey, WebDbPassKey, WebDbConnectionStringKey);
  58. services.AddSqlConnectionFactory<WebDBConetext>(conneciotnString);
  59. return services;
  60. }
  61. public static IServiceCollection AddOnlineLogDBContext(this IServiceCollection services, IConfiguration configuration)
  62. {
  63. var conneciotnString = configuration.GetConnectionString(OnlineLogDbUserIdKey, OnlineLogDbPassKey, OnlineLogDbConnectionStringKey);
  64. services.AddSqlConnectionFactory<OnlineLogDBContext>(conneciotnString);
  65. return services;
  66. }
  67. public static IServiceCollection AddAPILogDBContext(this IServiceCollection services, IConfiguration configuration)
  68. {
  69. var conneciotnString = configuration.GetConnectionString(ApiLogDbUserIdKey, ApiLogDbPassKey, ApiLogDbConnectionStringKey);
  70. services.AddSqlConnectionFactory<APILogDBContext>(conneciotnString);
  71. return services;
  72. }
  73. public static void AddSqlConnectionFactory<T>(this IServiceCollection services, string conneciotnString) where T : DbContext
  74. {
  75. services.AddSingleton<ISqlConnectionFactory<T>>(
  76. (serviceProvider) =>
  77. new SqlConnectionFactory<T>(serviceProvider.GetRequiredService<ILogger<SqlConnectionFactory<T>>>())
  78. {
  79. ConnectionString = conneciotnString
  80. });
  81. }
  82. public static void AddPortalDbContextInternal<T>(
  83. IServiceCollection services, IConfiguration configuration,
  84. string connectionString, bool logToConsole = false) where T : DbContext
  85. {
  86. var commandTimeout = int.TryParse(configuration[CommandTimeoutKey], out var temp) ? temp : 180;
  87. services.AddPooledDbContextFactory<T>((serviceProvider, options) => {
  88. options.UseSqlServer(connectionString, dbOptions =>
  89. {
  90. dbOptions.CommandTimeout(commandTimeout);
  91. });
  92. options.UseLoggerFactory(serviceProvider.GetRequiredService<ILoggerFactory>());
  93. });
  94. }
  95. public static string GetConnectionString(this IConfiguration configuration, string UserIdKey, string DbPassKey, string ConnectionStringKey)
  96. {
  97. string dbUserId = string.IsNullOrEmpty(configuration[UserIdKey]) ? string.Empty : $"user id={configuration[UserIdKey]};";
  98. string dbUserPass = string.IsNullOrEmpty(configuration[DbPassKey]) ? string.Empty : $"password={configuration[DbPassKey]};";
  99. string connectionString = configuration.GetConnectionString(ConnectionStringKey);
  100. var builder = new SqlConnectionStringBuilder(connectionString);
  101. if (!string.IsNullOrEmpty(dbUserId))
  102. {
  103. builder.UserID = dbUserId;
  104. }
  105. if (!string.IsNullOrEmpty(dbUserPass))
  106. {
  107. builder.Password = dbUserPass;
  108. }
  109. return builder.ToString();
  110. }
  111. }