From 1fd8ebb0190de9eb2607d0a61d3c657227ea7931 Mon Sep 17 00:00:00 2001 From: Oceania2018 Date: Fri, 5 Oct 2018 10:17:52 -0500 Subject: [PATCH] update module config mechanism --- BotSharp.Core/Modules/ModuleOptions.cs | 10 ++++ BotSharp.Core/Modules/ModulesOptions.cs | 5 ++ BotSharp.Core/Modules/ModulesStartup.cs | 22 +++++--- .../PlatformModuleAssembyLoader.cs} | 19 ++++--- BotSharp.WebHost/Settings/app.json | 26 ++++++--- BotSharp.WebHost/Startup.cs | 2 +- BotSharp.sln | 54 ++++++++++++++----- 7 files changed, 102 insertions(+), 36 deletions(-) rename BotSharp.Core/{PlatformAssembyLoader.cs => Modules/PlatformModuleAssembyLoader.cs} (62%) diff --git a/BotSharp.Core/Modules/ModuleOptions.cs b/BotSharp.Core/Modules/ModuleOptions.cs index b1d92061..ef9b1587 100644 --- a/BotSharp.Core/Modules/ModuleOptions.cs +++ b/BotSharp.Core/Modules/ModuleOptions.cs @@ -9,9 +9,19 @@ namespace BotSharp.Core.Modules /// public class ModuleOptions { + /// + /// Module name + /// + public string Name { get; set; } + /// /// Module type. /// public string Type { get; set; } + + /// + /// Module path + /// + public string Path { get; set; } } } diff --git a/BotSharp.Core/Modules/ModulesOptions.cs b/BotSharp.Core/Modules/ModulesOptions.cs index 4f2d9ee5..bb92f94c 100644 --- a/BotSharp.Core/Modules/ModulesOptions.cs +++ b/BotSharp.Core/Modules/ModulesOptions.cs @@ -9,6 +9,11 @@ namespace BotSharp.Core.Modules /// public class ModulesOptions { + /// + /// Module base directory + /// + public String ModuleBasePath { get; set; } + /// /// List of module configurations. /// diff --git a/BotSharp.Core/Modules/ModulesStartup.cs b/BotSharp.Core/Modules/ModulesStartup.cs index e1bea51d..133f8538 100644 --- a/BotSharp.Core/Modules/ModulesStartup.cs +++ b/BotSharp.Core/Modules/ModulesStartup.cs @@ -3,9 +3,11 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using System.Reflection; using System.Text; +using Console = Colorful.Console; namespace BotSharp.Core.Modules { @@ -31,17 +33,22 @@ namespace BotSharp.Core.Modules this._modules = options.Modules .Select(s => - { - Type type = Type.GetType(s.Type); + { + Type type = Type.GetType($"{s.Type}.ModuleInjector, {s.Type}"); if (type == null) { - throw new TypeLoadException( - $"Cannot load type \"{s.Type}\""); + /* hard to debug in docker */ + /* throw new TypeLoadException( + $"Cannot load type \"{s.Type}\"");*/ + Console.WriteLine($"Cannot load type \"{s.Type}\"", Color.Red); + return null; + } + else + { + IModule module = (IModule)Activator.CreateInstance(type); + return module; } - - IModule module = (IModule)Activator.CreateInstance(type); - return module; } ); } @@ -59,6 +66,7 @@ namespace BotSharp.Core.Modules { foreach (IModule module in this._modules) { + if (module == null) continue; module.ConfigureServices(services, this._configuration); } } diff --git a/BotSharp.Core/PlatformAssembyLoader.cs b/BotSharp.Core/Modules/PlatformModuleAssembyLoader.cs similarity index 62% rename from BotSharp.Core/PlatformAssembyLoader.cs rename to BotSharp.Core/Modules/PlatformModuleAssembyLoader.cs index 56576a6b..62b11c0d 100644 --- a/BotSharp.Core/PlatformAssembyLoader.cs +++ b/BotSharp.Core/Modules/PlatformModuleAssembyLoader.cs @@ -1,4 +1,5 @@ -using Colorful; +using BotSharp.Core.Modules; +using Colorful; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; @@ -11,25 +12,27 @@ using Console = Colorful.Console; namespace Microsoft.Extensions.DependencyInjection { - public static class PlatformAssembyLoader + public static class PlatformModuleAssembyLoader { - public static void LoadPlatformEmulatorAssemblies(IConfiguration configuration, Action action) + public static void LoadAssemblies(IConfiguration configuration, Action action) { - var platform = configuration.GetValue("Platform"); - var platformAssemblyName = configuration.GetValue("platformAssemblyName"); + ModulesOptions options = configuration.Get(); + + var platform = configuration.GetValue("platformModuleName"); + var module = options.Modules.Find(x => x.Name == platform); var engine = configuration.GetValue($"{platform}:BotEngine"); Formatter[] settings = new Formatter[] { new Formatter(platform, Color.Yellow), - new Formatter(platformAssemblyName, Color.Yellow), + new Formatter(module.Name, Color.Yellow), new Formatter(engine, Color.Yellow), }; // load platform emulator dynamically Console.WriteLine(); - var platformDllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{platformAssemblyName}.dll"); + var platformDllPath = Path.Combine(options.ModuleBasePath, module.Path, $"{module.Type}.dll"); if (File.Exists(platformDllPath)) { Assembly library = AssemblyLoadContext.Default.LoadFromAssemblyPath(platformDllPath); @@ -38,7 +41,7 @@ namespace Microsoft.Extensions.DependencyInjection } else { - Console.WriteLine($"Can't load {platformAssemblyName} assembly."); + Console.WriteLine($"Can't load {module.Type} assembly."); } Console.WriteLine(); } diff --git a/BotSharp.WebHost/Settings/app.json b/BotSharp.WebHost/Settings/app.json index 4fb42865..1cb66df0 100644 --- a/BotSharp.WebHost/Settings/app.json +++ b/BotSharp.WebHost/Settings/app.json @@ -1,17 +1,29 @@ { + "version": "0.1.0", "assemblies": "BotSharp.Core", - "platform": "DialogflowAi", - "platformAssemblyName": "BotSharp.Platform.Dialogflow", - - "version": "0.1.0", + "platformModuleName": "DialogflowAi", "machineLearning": { "dataDir": "D:\\Projects\\BotSharp\\Data" }, - "Modules": [ - { "Type": "BotSharp.Platform.Dialogflow.DialogflowModule, BotSharp.Platform.Dialogflow" }, - //{ "Type": "BotSharp.Platform.Rasa.RasaModule, BotSharp.Platform.Rasa" } + "moduleBasePath": "D:\\Projects", + "modules": [ + { + "Name": "DialogflowAi", + "Type": "BotSharp.Platform.Dialogflow", + "Path": "botsharp-dialogflow\\BotSharp.Platform.Dialogflow\\bin\\Debug\\netstandard2.0" + }, + { + "Name": "RasaAi", + "Type": "BotSharp.Platform.Rasa", + "Path": "botsharp-rasa\\BotSharp.Platform.Rasa\\bin\\Debug\\netstandard2.0" + }, + { + "Name": "ArticulateAi", + "Type": "BotSharp.Platform.Articulate", + "Path": "botsharp-articulate\\BotSharp.Platform.Articulate\\bin\\Debug\\netstandard2.0" + } ] } diff --git a/BotSharp.WebHost/Startup.cs b/BotSharp.WebHost/Startup.cs index 5e2d05fb..f4dea5fc 100644 --- a/BotSharp.WebHost/Startup.cs +++ b/BotSharp.WebHost/Startup.cs @@ -40,7 +40,7 @@ namespace BotSharp.WebHost options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); }); - PlatformAssembyLoader.LoadPlatformEmulatorAssemblies(Configuration, assembly => mvcBuilder.AddApplicationPart(assembly)); + PlatformModuleAssembyLoader.LoadAssemblies(Configuration, assembly => mvcBuilder.AddApplicationPart(assembly)); this.modulesStartup.ConfigureServices(services); diff --git a/BotSharp.sln b/BotSharp.sln index c52c8104..27dc9a6b 100644 --- a/BotSharp.sln +++ b/BotSharp.sln @@ -22,7 +22,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Abstracti EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Models", "BotSharp.Platform.Models\BotSharp.Platform.Models.csproj", "{C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Rasa", "..\botsharp-rasa\BotSharp.Platform.Rasa\BotSharp.Platform.Rasa.csproj", "{2902810C-F8F2-400E-88DB-72CBE393B175}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Dialogflow", "..\botsharp-dialogflow\BotSharp.Platform.Dialogflow\BotSharp.Platform.Dialogflow.csproj", "{3599EC12-BE49-4BA2-B02F-86602BC1240C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Rasa", "..\botsharp-rasa\BotSharp.Platform.Rasa\BotSharp.Platform.Rasa.csproj", "{3DE700F6-16AE-4A14-9119-E72BFBE85AB0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Articulate", "..\botsharp-articulate\BotSharp.Platform.Articulate\BotSharp.Platform.Articulate.csproj", "{ED94ADD1-B8BA-4103-ABF9-662B19E450DD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -118,18 +122,42 @@ Global {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Release|Any CPU.Build.0 = Release|Any CPU {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Release|x64.ActiveCfg = Release|Any CPU {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Release|x64.Build.0 = Release|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.Debug|x64.ActiveCfg = Debug|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.Debug|x64.Build.0 = Debug|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.DIALOGFLOW|Any CPU.ActiveCfg = Debug|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.DIALOGFLOW|Any CPU.Build.0 = Debug|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.DIALOGFLOW|x64.ActiveCfg = Debug|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.DIALOGFLOW|x64.Build.0 = Debug|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.Release|Any CPU.Build.0 = Release|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.Release|x64.ActiveCfg = Release|Any CPU - {2902810C-F8F2-400E-88DB-72CBE393B175}.Release|x64.Build.0 = Release|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.Debug|x64.ActiveCfg = Debug|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.Debug|x64.Build.0 = Debug|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.DIALOGFLOW|x64.ActiveCfg = DIALOGFLOW|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.DIALOGFLOW|x64.Build.0 = DIALOGFLOW|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.Release|Any CPU.Build.0 = Release|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.Release|x64.ActiveCfg = Release|Any CPU + {3599EC12-BE49-4BA2-B02F-86602BC1240C}.Release|x64.Build.0 = Release|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.Debug|x64.ActiveCfg = Debug|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.Debug|x64.Build.0 = Debug|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.DIALOGFLOW|Any CPU.ActiveCfg = Debug|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.DIALOGFLOW|Any CPU.Build.0 = Debug|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.DIALOGFLOW|x64.ActiveCfg = Debug|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.DIALOGFLOW|x64.Build.0 = Debug|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.Release|Any CPU.Build.0 = Release|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.Release|x64.ActiveCfg = Release|Any CPU + {3DE700F6-16AE-4A14-9119-E72BFBE85AB0}.Release|x64.Build.0 = Release|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.Debug|x64.ActiveCfg = Debug|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.Debug|x64.Build.0 = Debug|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.DIALOGFLOW|Any CPU.ActiveCfg = Debug|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.DIALOGFLOW|Any CPU.Build.0 = Debug|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.DIALOGFLOW|x64.ActiveCfg = Debug|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.DIALOGFLOW|x64.Build.0 = Debug|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.Release|Any CPU.Build.0 = Release|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.Release|x64.ActiveCfg = Release|Any CPU + {ED94ADD1-B8BA-4103-ABF9-662B19E450DD}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE