|
2 | 2 | using System.Collections.Generic; |
3 | 3 | using System.IO; |
4 | 4 | using System.Linq; |
| 5 | +using System.Text.RegularExpressions; |
5 | 6 | using eFormAPI.Web.Hosting.Enums; |
6 | 7 | using eFormAPI.Web.Hosting.Extensions; |
7 | 8 | using eFormAPI.Web.Infrastructure.Database.Entities; |
@@ -33,40 +34,57 @@ public static List<IEformPlugin> GetPlugins(IConfiguration configuration) |
33 | 34 | eformPlugins = dbContext.EformPlugins |
34 | 35 | .AsNoTracking() |
35 | 36 | .ToList(); |
36 | | - } catch {} |
| 37 | + } |
| 38 | + catch |
| 39 | + { |
| 40 | + } |
37 | 41 | } |
| 42 | + |
38 | 43 | var plugins = new List<IEformPlugin>(); |
39 | 44 | // create plugin loaders |
40 | 45 | if (eformPlugins != null) |
41 | 46 | { |
42 | | - foreach (var plugin in GetAllPlugins()) |
| 47 | + using (var dbContext = contextFactory.CreateDbContext(new[] {configuration.MyConnectionString()})) |
43 | 48 | { |
44 | | - var eformPlugin = eformPlugins.FirstOrDefault(x => x.PluginId == plugin.PluginId); |
45 | | - if (eformPlugin != null) |
| 49 | + var connectionString = dbContext.Database.GetDbConnection().ConnectionString; |
| 50 | + |
| 51 | + var connectionStringMatch = Regex.Match(connectionString, @"Database=(.*)_(.*);");//.Groups[1].Value; |
| 52 | + if (connectionStringMatch.Groups.Count != 3) |
46 | 53 | { |
47 | | - if (eformPlugin.Status == (int) PluginStatus.Enabled) |
48 | | - { |
49 | | - plugins.Add(plugin); |
50 | | - } |
| 54 | + throw new Exception("Error while parsing connection-string database name"); |
51 | 55 | } |
52 | | - else |
| 56 | + |
| 57 | + var dbNameSection = connectionStringMatch.Groups[0].Value; |
| 58 | + var dbPrefix = connectionStringMatch.Groups[1].Value; |
| 59 | + |
| 60 | + foreach (var plugin in GetAllPlugins()) |
53 | 61 | { |
54 | | - newPlugins.Add(new EformPlugin() |
| 62 | + var eformPlugin = eformPlugins.FirstOrDefault(x => x.PluginId == plugin.PluginId); |
| 63 | + if (eformPlugin != null) |
55 | 64 | { |
56 | | - PluginId = plugin.PluginId, |
57 | | - ConnectionString = "...", |
58 | | - Status = (int) PluginStatus.Disabled |
59 | | - }); |
| 65 | + if (eformPlugin.Status == (int) PluginStatus.Enabled) |
| 66 | + { |
| 67 | + plugins.Add(plugin); |
| 68 | + } |
| 69 | + } |
| 70 | + else |
| 71 | + { |
| 72 | + var pluginDbName = $"Database={dbPrefix}_{plugin.PluginId};"; |
| 73 | + var pluginConnectionString = connectionString.Replace(dbNameSection, pluginDbName); |
| 74 | + newPlugins.Add(new EformPlugin() |
| 75 | + { |
| 76 | + PluginId = plugin.PluginId, |
| 77 | + ConnectionString = pluginConnectionString, |
| 78 | + Status = (int) PluginStatus.Disabled |
| 79 | + }); |
| 80 | + } |
60 | 81 | } |
| 82 | + |
| 83 | + dbContext.EformPlugins.AddRange(newPlugins); |
| 84 | + dbContext.SaveChanges(); |
61 | 85 | } |
62 | 86 | } |
63 | | - |
64 | 87 |
|
65 | | - using (var dbContext = contextFactory.CreateDbContext(new[] {configuration.MyConnectionString()})) |
66 | | - { |
67 | | - dbContext.EformPlugins.AddRange(newPlugins); |
68 | | - dbContext.SaveChanges(); |
69 | | - } |
70 | 88 | return plugins; |
71 | 89 | } |
72 | 90 |
|
@@ -132,10 +150,10 @@ public static List<IEformPlugin> GetAllPlugins() |
132 | 150 | Console.WriteLine("Found plugin : " + type.Name); |
133 | 151 | var plugin = (IEformPlugin) Activator.CreateInstance(type); |
134 | 152 | plugins.Add(plugin); |
135 | | - |
136 | 153 | } |
137 | 154 | } |
138 | 155 | } |
| 156 | + |
139 | 157 | Console.ForegroundColor = ConsoleColor.Green; |
140 | 158 | Console.WriteLine($"{plugins.Count} plugins found"); |
141 | 159 |
|
|
0 commit comments