update module config mechanism
This commit is contained in:
parent
747dea0e7d
commit
1fd8ebb019
|
|
@ -9,9 +9,19 @@ namespace BotSharp.Core.Modules
|
|||
/// </summary>
|
||||
public class ModuleOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Module name
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Module type.
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Module path
|
||||
/// </summary>
|
||||
public string Path { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,11 @@ namespace BotSharp.Core.Modules
|
|||
/// </summary>
|
||||
public class ModulesOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Module base directory
|
||||
/// </summary>
|
||||
public String ModuleBasePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// List of module configurations.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Assembly> action)
|
||||
public static void LoadAssemblies(IConfiguration configuration, Action<Assembly> action)
|
||||
{
|
||||
var platform = configuration.GetValue<string>("Platform");
|
||||
var platformAssemblyName = configuration.GetValue<string>("platformAssemblyName");
|
||||
ModulesOptions options = configuration.Get<ModulesOptions>();
|
||||
|
||||
var platform = configuration.GetValue<string>("platformModuleName");
|
||||
var module = options.Modules.Find(x => x.Name == platform);
|
||||
var engine = configuration.GetValue<string>($"{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();
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
54
BotSharp.sln
54
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
|
||||
|
|
|
|||
Loading…
Reference in a new issue