aboutsummaryrefslogtreecommitdiff
path: root/lib/Plugins.Essentials.ServiceStack
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2024-01-02 02:33:05 -0500
committerLibravatar vnugent <public@vaughnnugent.com>2024-01-02 02:33:05 -0500
commit4ef0142747c4a0dd0c4cb71d8e7359c03b3a2942 (patch)
tree2991941aec6a0b981411a4f4bb83d8d2ad900aba /lib/Plugins.Essentials.ServiceStack
parenta6b628c8653485a803bdbe322e2ecd2a69fc8e5a (diff)
breaking changes: plugin service pools & move plugin api away from web related
Diffstat (limited to 'lib/Plugins.Essentials.ServiceStack')
-rw-r--r--lib/Plugins.Essentials.ServiceStack/src/Construction/SsBuilderExtensions.cs6
-rw-r--r--lib/Plugins.Essentials.ServiceStack/src/IManagedPlugin.cs8
-rw-r--r--lib/Plugins.Essentials.ServiceStack/src/IManualPlugin.cs8
-rw-r--r--lib/Plugins.Essentials.ServiceStack/src/PluginExtensions.cs22
-rw-r--r--lib/Plugins.Essentials.ServiceStack/src/PluginLoadEventListener.cs2
-rw-r--r--lib/Plugins.Essentials.ServiceStack/src/PluginManager.cs2
-rw-r--r--lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs27
-rw-r--r--lib/Plugins.Essentials.ServiceStack/src/ServiceGroup.cs6
8 files changed, 27 insertions, 54 deletions
diff --git a/lib/Plugins.Essentials.ServiceStack/src/Construction/SsBuilderExtensions.cs b/lib/Plugins.Essentials.ServiceStack/src/Construction/SsBuilderExtensions.cs
index ee49f99..d96809b 100644
--- a/lib/Plugins.Essentials.ServiceStack/src/Construction/SsBuilderExtensions.cs
+++ b/lib/Plugins.Essentials.ServiceStack/src/Construction/SsBuilderExtensions.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials.ServiceStack
@@ -185,9 +185,7 @@ namespace VNLib.Plugins.Essentials.ServiceStack.Construction
private static void OnPluginServiceEvent<T>(this IManagedPlugin plugin, Action<T> loader)
{
- object? service = plugin.Services.GetService(typeof(T));
-
- if (service is T s)
+ if (plugin.Services.GetService(typeof(T)) is T s)
{
loader(s);
}
diff --git a/lib/Plugins.Essentials.ServiceStack/src/IManagedPlugin.cs b/lib/Plugins.Essentials.ServiceStack/src/IManagedPlugin.cs
index 21c8e91..8332f7e 100644
--- a/lib/Plugins.Essentials.ServiceStack/src/IManagedPlugin.cs
+++ b/lib/Plugins.Essentials.ServiceStack/src/IManagedPlugin.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials.ServiceStack
@@ -42,12 +42,6 @@ namespace VNLib.Plugins.Essentials.ServiceStack
IServiceContainer Services { get; }
/// <summary>
- /// Internal call to get all exported plugin endpoints
- /// </summary>
- /// <returns></returns>
- internal IEndpoint[] GetEndpoints();
-
- /// <summary>
/// Internal notification that the plugin is loaded
/// </summary>
internal void OnPluginLoaded();
diff --git a/lib/Plugins.Essentials.ServiceStack/src/IManualPlugin.cs b/lib/Plugins.Essentials.ServiceStack/src/IManualPlugin.cs
index e58067f..cecd481 100644
--- a/lib/Plugins.Essentials.ServiceStack/src/IManualPlugin.cs
+++ b/lib/Plugins.Essentials.ServiceStack/src/IManualPlugin.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials.ServiceStack
@@ -45,12 +45,6 @@ namespace VNLib.Plugins.Essentials.ServiceStack
void GetAllExportedServices(IServiceContainer container);
/// <summary>
- /// Collects all exported endpoints to put into service
- /// </summary>
- /// <returns>The collection of endpoints</returns>
- IEndpoint[] GetEndpoints();
-
- /// <summary>
/// Initializes the plugin, called before accessing any other methods
/// </summary>
void Initialize();
diff --git a/lib/Plugins.Essentials.ServiceStack/src/PluginExtensions.cs b/lib/Plugins.Essentials.ServiceStack/src/PluginExtensions.cs
index d93df6d..d8cdf75 100644
--- a/lib/Plugins.Essentials.ServiceStack/src/PluginExtensions.cs
+++ b/lib/Plugins.Essentials.ServiceStack/src/PluginExtensions.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials.ServiceStack
@@ -26,7 +26,7 @@ using System.Linq;
using System.Collections.Generic;
using VNLib.Utils.Logging;
-using VNLib.Plugins.Runtime;
+using VNLib.Plugins.Essentials.Runtime;
namespace VNLib.Plugins.Essentials.ServiceStack
{
@@ -40,14 +40,18 @@ namespace VNLib.Plugins.Essentials.ServiceStack
/// </summary>
/// <param name="plugin"></param>
/// <returns>The enumeration of web endpoints</returns>
- internal static IEnumerable<IEndpoint> GetEndpoints(this IPlugin plugin) => ((IWebPlugin)plugin).GetEndpoints();
+ internal static IEnumerable<IEndpoint> GetEndpoints(this IManagedPlugin plugin)
+ {
+ //Try to get the endpoint defintion
+ if (plugin.Services.GetService(typeof(IVirtualEndpointDefinition)) is IVirtualEndpointDefinition defintion)
+ {
+ //Return the endpoints from the definition
+ return defintion.GetEndpoints();
+ }
- /// <summary>
- /// Gets only plugins that implement <see cref="IWebPlugin"/> interface
- /// </summary>
- /// <param name="controller"></param>
- /// <returns></returns>
- internal static IEnumerable<LivePlugin> GetOnlyWebPlugins(this PluginController controller) => controller.Plugins.Where(static p => p.Plugin is IWebPlugin);
+ //If the plugin does not have an endpoint definition, return an empty enumeration
+ return Enumerable.Empty<IEndpoint>();
+ }
/// <summary>
/// Loads all plugins that implement <see cref="IWebPlugin"/> interface into the
diff --git a/lib/Plugins.Essentials.ServiceStack/src/PluginLoadEventListener.cs b/lib/Plugins.Essentials.ServiceStack/src/PluginLoadEventListener.cs
index 0eaa3a8..b24019b 100644
--- a/lib/Plugins.Essentials.ServiceStack/src/PluginLoadEventListener.cs
+++ b/lib/Plugins.Essentials.ServiceStack/src/PluginLoadEventListener.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials.ServiceStack
diff --git a/lib/Plugins.Essentials.ServiceStack/src/PluginManager.cs b/lib/Plugins.Essentials.ServiceStack/src/PluginManager.cs
index ba3b91a..f5f2abc 100644
--- a/lib/Plugins.Essentials.ServiceStack/src/PluginManager.cs
+++ b/lib/Plugins.Essentials.ServiceStack/src/PluginManager.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials.ServiceStack
diff --git a/lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs b/lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs
index c2ff1e4..e6489c9 100644
--- a/lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs
+++ b/lib/Plugins.Essentials.ServiceStack/src/PluginStackInitializer.cs
@@ -26,7 +26,6 @@
using System;
using System.IO;
using System.Linq;
-using System.Reflection;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Collections.Generic;
@@ -35,7 +34,7 @@ using System.ComponentModel.Design;
using VNLib.Utils.Logging;
using VNLib.Plugins.Runtime;
using VNLib.Utils.Extensions;
-using VNLib.Plugins.Attributes;
+using VNLib.Plugins.Runtime.Services;
namespace VNLib.Plugins.Essentials.ServiceStack
{
@@ -229,9 +228,6 @@ namespace VNLib.Plugins.Essentials.ServiceStack
}
}
- ///<inheritdoc/>
- IEndpoint[] IManagedPlugin.GetEndpoints() => Plugin.Controller.GetOnlyWebPlugins().SelectMany(static pl => pl.Plugin!.GetEndpoints()).ToArray();
-
/*
* Automatically called after the plugin has successfully loaded
* by event handlers below
@@ -246,21 +242,9 @@ namespace VNLib.Plugins.Essentials.ServiceStack
//Init new service container
_services = new();
- //Get types from plugin
- foreach (LivePlugin plugin in Plugin.Controller.Plugins)
- {
- /*
- * Get the exposed configurator method if declared,
- * it may not be defined.
- */
- ServiceConfigurator? callback = plugin.PluginType.GetMethods()
- .Where(static m => m.GetCustomAttribute<ServiceConfiguratorAttribute>() != null && !m.IsAbstract)
- .Select(m => m.CreateDelegate<ServiceConfigurator>(plugin.Plugin))
- .FirstOrDefault();
-
- //Invoke if defined to expose services
- callback?.Invoke(_services);
- }
+ //Get all exported services and add them to the container
+ PluginServiceExport[] exports = Plugin.Controller.GetExportedServices();
+ Array.ForEach(exports, e => _services.AddService(e.ServiceType, e.Service, true));
}
///<inheritdoc/>
@@ -298,9 +282,6 @@ namespace VNLib.Plugins.Essentials.ServiceStack
///<inheritdoc/>
public IServiceContainer Services => _container;
- ///<inheritdoc/>
- IEndpoint[] IManagedPlugin.GetEndpoints() => Plugin.GetEndpoints();
-
public void Load()
{
Plugin.Load();
diff --git a/lib/Plugins.Essentials.ServiceStack/src/ServiceGroup.cs b/lib/Plugins.Essentials.ServiceStack/src/ServiceGroup.cs
index e504013..da34d54 100644
--- a/lib/Plugins.Essentials.ServiceStack/src/ServiceGroup.cs
+++ b/lib/Plugins.Essentials.ServiceStack/src/ServiceGroup.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023 Vaughn Nugent
+* Copyright (c) 2024 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Plugins.Essentials.ServiceStack
@@ -23,6 +23,7 @@
*/
using System.Net;
+using System.Linq;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
@@ -82,7 +83,8 @@ namespace VNLib.Plugins.Essentials.ServiceStack
internal void OnPluginLoaded(IManagedPlugin plugin)
{
//Get all new endpoints for plugin
- IEndpoint[] newEndpoints = plugin.GetEndpoints();
+ IEndpoint[] newEndpoints = plugin.GetEndpoints()
+ .ToArray();
//Add endpoints to dict
_endpointsForPlugins.AddOrUpdate(plugin, newEndpoints);