update module config mechanism

This commit is contained in:
Oceania2018 2018-10-05 10:17:52 -05:00
parent 747dea0e7d
commit 1fd8ebb019
7 changed files with 102 additions and 36 deletions

View file

@ -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; }
}
}

View file

@ -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>

View file

@ -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);
}
}

View file

@ -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();
}

View file

@ -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"
}
]
}

View file

@ -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);

View file

@ -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