plugin selection
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
using Ninject;
|
||||
using Ninject.Extensions.ChildKernel;
|
||||
using Serilog;
|
||||
using System.ComponentModel;
|
||||
using VisionBuilder.UI.Common.Attributes;
|
||||
using VisionBuilder.UI.Common.Plugins;
|
||||
|
||||
namespace VisionBuilder.UI.Common;
|
||||
@@ -24,12 +26,23 @@ public static class Extensions
|
||||
self.Bind<T, IVisionBuilderModule>().To<T>().InSingletonScope();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static int GetModulePriority(IVisionBuilderModule module)
|
||||
{
|
||||
var priorityAttribute = module.GetType().GetCustomAttributes(typeof(ModulePriorityAttribute), true)
|
||||
.FirstOrDefault() as ModulePriorityAttribute;
|
||||
return priorityAttribute?.Priority ?? 0;
|
||||
}
|
||||
|
||||
private static List<Type> _initializedModules = new List<Type>();
|
||||
|
||||
public static void InitializeModules(this IKernel self)
|
||||
{
|
||||
|
||||
var serviceTypes = self.GetAll(typeof(IVisionBuilderModule)).Select(x => (IVisionBuilderModule)x).ToList();
|
||||
var serviceTypes = self.GetAll(typeof(IVisionBuilderModule)).Select(x => (IVisionBuilderModule)x)
|
||||
.Where(x => !_initializedModules.Contains(x.GetType()))
|
||||
.OrderByDescending(GetModulePriority)
|
||||
.ToList();
|
||||
foreach (var service in serviceTypes)
|
||||
{
|
||||
try
|
||||
@@ -45,12 +58,22 @@ public static class Extensions
|
||||
Log.Error($"Error initializing module {service.GetType().Name}: {e}", e);
|
||||
}
|
||||
|
||||
_initializedModules.Add(service.GetType());
|
||||
}
|
||||
}
|
||||
|
||||
public static IKernel LoadGlobalPlugins(this IKernel self)
|
||||
public static IKernel UsePlugins(this IKernel self)
|
||||
{
|
||||
var plugins = PluginLoader.Instance.Plugins;
|
||||
TypeDescriptor.AddAttributes(typeof(List<PluginSettings.PluginFlag>), new TypeConverterAttribute(typeof(PluginFlagConverter)));
|
||||
self.Bind<PluginSettings, ISettings>().ToConstant(new PluginSettings());
|
||||
self.RegisterModule<PluginLoader>();
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
public static IKernel InitializeGlobalPlugins(this IKernel self)
|
||||
{
|
||||
var plugins = self.Get<PluginLoader>().Plugins;
|
||||
foreach (var plugin in plugins)
|
||||
{
|
||||
try
|
||||
@@ -66,9 +89,9 @@ public static class Extensions
|
||||
return self;
|
||||
}
|
||||
|
||||
public static IKernel LoadCameraPlugins(this IChildKernel self, string cameraName)
|
||||
public static IKernel InitializeCameraPlugins(this IChildKernel self, string cameraName)
|
||||
{
|
||||
var plugins = PluginLoader.Instance.Plugins;
|
||||
var plugins = self.Get<PluginLoader>().Plugins;
|
||||
foreach (var plugin in plugins)
|
||||
{
|
||||
try
|
||||
|
||||
Reference in New Issue
Block a user