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