update module config mechanism
This commit is contained in:
parent
747dea0e7d
commit
1fd8ebb019
|
|
@ -9,9 +9,19 @@ namespace BotSharp.Core.Modules
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ModuleOptions
|
public class ModuleOptions
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Module name
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Module type.
|
/// Module type.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Type { get; set; }
|
public string Type { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Module path
|
||||||
|
/// </summary>
|
||||||
|
public string Path { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,11 @@ namespace BotSharp.Core.Modules
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ModulesOptions
|
public class ModulesOptions
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Module base directory
|
||||||
|
/// </summary>
|
||||||
|
public String ModuleBasePath { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// List of module configurations.
|
/// List of module configurations.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,11 @@ using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Console = Colorful.Console;
|
||||||
|
|
||||||
namespace BotSharp.Core.Modules
|
namespace BotSharp.Core.Modules
|
||||||
{
|
{
|
||||||
|
|
@ -32,17 +34,22 @@ namespace BotSharp.Core.Modules
|
||||||
this._modules = options.Modules
|
this._modules = options.Modules
|
||||||
.Select(s =>
|
.Select(s =>
|
||||||
{
|
{
|
||||||
Type type = Type.GetType(s.Type);
|
Type type = Type.GetType($"{s.Type}.ModuleInjector, {s.Type}");
|
||||||
|
|
||||||
if (type == null)
|
if (type == null)
|
||||||
{
|
{
|
||||||
throw new TypeLoadException(
|
/* hard to debug in docker */
|
||||||
$"Cannot load type \"{s.Type}\"");
|
/* 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);
|
IModule module = (IModule)Activator.CreateInstance(type);
|
||||||
return module;
|
return module;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -59,6 +66,7 @@ namespace BotSharp.Core.Modules
|
||||||
{
|
{
|
||||||
foreach (IModule module in this._modules)
|
foreach (IModule module in this._modules)
|
||||||
{
|
{
|
||||||
|
if (module == null) continue;
|
||||||
module.ConfigureServices(services, this._configuration);
|
module.ConfigureServices(services, this._configuration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using Colorful;
|
using BotSharp.Core.Modules;
|
||||||
|
using Colorful;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
@ -11,25 +12,27 @@ using Console = Colorful.Console;
|
||||||
|
|
||||||
namespace Microsoft.Extensions.DependencyInjection
|
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");
|
ModulesOptions options = configuration.Get<ModulesOptions>();
|
||||||
var platformAssemblyName = configuration.GetValue<string>("platformAssemblyName");
|
|
||||||
|
var platform = configuration.GetValue<string>("platformModuleName");
|
||||||
|
var module = options.Modules.Find(x => x.Name == platform);
|
||||||
var engine = configuration.GetValue<string>($"{platform}:BotEngine");
|
var engine = configuration.GetValue<string>($"{platform}:BotEngine");
|
||||||
|
|
||||||
Formatter[] settings = new Formatter[]
|
Formatter[] settings = new Formatter[]
|
||||||
{
|
{
|
||||||
new Formatter(platform, Color.Yellow),
|
new Formatter(platform, Color.Yellow),
|
||||||
new Formatter(platformAssemblyName, Color.Yellow),
|
new Formatter(module.Name, Color.Yellow),
|
||||||
new Formatter(engine, Color.Yellow),
|
new Formatter(engine, Color.Yellow),
|
||||||
};
|
};
|
||||||
|
|
||||||
// load platform emulator dynamically
|
// load platform emulator dynamically
|
||||||
Console.WriteLine();
|
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))
|
if (File.Exists(platformDllPath))
|
||||||
{
|
{
|
||||||
Assembly library = AssemblyLoadContext.Default.LoadFromAssemblyPath(platformDllPath);
|
Assembly library = AssemblyLoadContext.Default.LoadFromAssemblyPath(platformDllPath);
|
||||||
|
|
@ -38,7 +41,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Can't load {platformAssemblyName} assembly.");
|
Console.WriteLine($"Can't load {module.Type} assembly.");
|
||||||
}
|
}
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
|
|
@ -1,17 +1,29 @@
|
||||||
{
|
{
|
||||||
|
"version": "0.1.0",
|
||||||
"assemblies": "BotSharp.Core",
|
"assemblies": "BotSharp.Core",
|
||||||
|
|
||||||
"platform": "DialogflowAi",
|
"platformModuleName": "DialogflowAi",
|
||||||
"platformAssemblyName": "BotSharp.Platform.Dialogflow",
|
|
||||||
|
|
||||||
"version": "0.1.0",
|
|
||||||
|
|
||||||
"machineLearning": {
|
"machineLearning": {
|
||||||
"dataDir": "D:\\Projects\\BotSharp\\Data"
|
"dataDir": "D:\\Projects\\BotSharp\\Data"
|
||||||
},
|
},
|
||||||
|
|
||||||
"Modules": [
|
"moduleBasePath": "D:\\Projects",
|
||||||
{ "Type": "BotSharp.Platform.Dialogflow.DialogflowModule, BotSharp.Platform.Dialogflow" },
|
"modules": [
|
||||||
//{ "Type": "BotSharp.Platform.Rasa.RasaModule, BotSharp.Platform.Rasa" }
|
{
|
||||||
|
"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();
|
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
||||||
});
|
});
|
||||||
|
|
||||||
PlatformAssembyLoader.LoadPlatformEmulatorAssemblies(Configuration, assembly => mvcBuilder.AddApplicationPart(assembly));
|
PlatformModuleAssembyLoader.LoadAssemblies(Configuration, assembly => mvcBuilder.AddApplicationPart(assembly));
|
||||||
|
|
||||||
this.modulesStartup.ConfigureServices(services);
|
this.modulesStartup.ConfigureServices(services);
|
||||||
|
|
||||||
|
|
|
||||||
54
BotSharp.sln
54
BotSharp.sln
|
|
@ -22,7 +22,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Abstracti
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Models", "BotSharp.Platform.Models\BotSharp.Platform.Models.csproj", "{C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Models", "BotSharp.Platform.Models\BotSharp.Platform.Models.csproj", "{C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}"
|
||||||
EndProject
|
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
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
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|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.ActiveCfg = Release|Any CPU
|
||||||
{C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Release|x64.Build.0 = 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
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.Debug|x64.ActiveCfg = Debug|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.Debug|x64.Build.0 = Debug|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.DIALOGFLOW|Any CPU.ActiveCfg = Debug|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.DIALOGFLOW|Any CPU.Build.0 = Debug|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.DIALOGFLOW|x64.ActiveCfg = Debug|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.DIALOGFLOW|x64.ActiveCfg = DIALOGFLOW|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.DIALOGFLOW|x64.Build.0 = Debug|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.DIALOGFLOW|x64.Build.0 = DIALOGFLOW|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.Release|Any CPU.Build.0 = Release|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.Release|x64.ActiveCfg = Release|Any CPU
|
{3599EC12-BE49-4BA2-B02F-86602BC1240C}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{2902810C-F8F2-400E-88DB-72CBE393B175}.Release|x64.Build.0 = 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
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue