22using System . Collections . Generic ;
33using System . IO ;
44using System . Linq ;
5+ using System . Text . RegularExpressions ;
56using eFormAPI . Web . Hosting . Enums ;
67using eFormAPI . Web . Hosting . Extensions ;
78using eFormAPI . Web . Infrastructure . Database . Entities ;
@@ -24,7 +25,6 @@ public static List<IEformPlugin> GetPlugins(IConfiguration configuration)
2425 {
2526 // Load info from database
2627 List < EformPlugin > eformPlugins = null ;
27- var newPlugins = new List < EformPlugin > ( ) ;
2828 var contextFactory = new BaseDbContextFactory ( ) ;
2929 using ( var dbContext = contextFactory . CreateDbContext ( new [ ] { configuration . MyConnectionString ( ) } ) )
3030 {
@@ -33,40 +33,53 @@ public static List<IEformPlugin> GetPlugins(IConfiguration configuration)
3333 eformPlugins = dbContext . EformPlugins
3434 . AsNoTracking ( )
3535 . ToList ( ) ;
36- } catch { }
36+ }
37+ catch
38+ {
39+ }
3740 }
41+
3842 var plugins = new List < IEformPlugin > ( ) ;
3943 // create plugin loaders
4044 if ( eformPlugins != null )
4145 {
42- foreach ( var plugin in GetAllPlugins ( ) )
46+ using ( var dbContext = contextFactory . CreateDbContext ( new [ ] { configuration . MyConnectionString ( ) } ) )
4347 {
44- var eformPlugin = eformPlugins . FirstOrDefault ( x => x . PluginId == plugin . PluginId ) ;
45- if ( eformPlugin != null )
48+ var connectionString = dbContext . Database . GetDbConnection ( ) . ConnectionString ;
49+
50+ var dbNameSection = Regex . Match ( connectionString , @"(Database=\w*;)" ) . Groups [ 0 ] . Value ;
51+ var dbPrefix = Regex . Match ( connectionString , @"Database=(\d*)_" ) . Groups [ 1 ] . Value ;
52+
53+ foreach ( var plugin in GetAllPlugins ( ) )
4654 {
47- if ( eformPlugin . Status == ( int ) PluginStatus . Enabled )
55+ var eformPlugin = eformPlugins . FirstOrDefault ( x => x . PluginId == plugin . PluginId ) ;
56+ if ( eformPlugin != null )
4857 {
49- plugins . Add ( plugin ) ;
58+ if ( eformPlugin . Status == ( int ) PluginStatus . Enabled )
59+ {
60+ plugins . Add ( plugin ) ;
61+ }
5062 }
51- }
52- else
53- {
54- newPlugins . Add ( new EformPlugin ( )
63+ else
5564 {
56- PluginId = plugin . PluginId ,
57- ConnectionString = "..." ,
58- Status = ( int ) PluginStatus . Disabled
59- } ) ;
65+ var pluginDbName = $ "Database={ dbPrefix } _{ plugin . PluginId } ;";
66+ var pluginConnectionString = connectionString . Replace ( dbNameSection , pluginDbName ) ;
67+ var newPlugin = new EformPlugin ( )
68+ {
69+ PluginId = plugin . PluginId ,
70+ ConnectionString = pluginConnectionString ,
71+ Status = ( int ) PluginStatus . Disabled
72+ } ;
73+ dbContext . EformPlugins . Add ( newPlugin ) ;
74+ dbContext . SaveChanges ( ) ;
75+ plugins . Add ( plugin ) ;
76+ }
6077 }
78+
79+
6180 }
6281 }
63-
6482
65- using ( var dbContext = contextFactory . CreateDbContext ( new [ ] { configuration . MyConnectionString ( ) } ) )
66- {
67- dbContext . EformPlugins . AddRange ( newPlugins ) ;
68- dbContext . SaveChanges ( ) ;
69- }
7083 return plugins ;
7184 }
7285
@@ -132,10 +145,10 @@ public static List<IEformPlugin> GetAllPlugins()
132145 Console . WriteLine ( "Found plugin : " + type . Name ) ;
133146 var plugin = ( IEformPlugin ) Activator . CreateInstance ( type ) ;
134147 plugins . Add ( plugin ) ;
135-
136148 }
137149 }
138150 }
151+
139152 Console . ForegroundColor = ConsoleColor . Green ;
140153 Console . WriteLine ( $ "{ plugins . Count } plugins found") ;
141154
0 commit comments