2022-12-09 11:25:39 +00:00
|
|
|
using System.Reflection;
|
|
|
|
|
using Elsa.Features.Services;
|
|
|
|
|
using FastEndpoints;
|
|
|
|
|
|
2022-12-31 15:16:43 +00:00
|
|
|
// ReSharper disable once CheckNamespace
|
2022-12-09 11:25:39 +00:00
|
|
|
namespace Elsa.Extensions;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Provides extensions to <see cref="IModule"/>.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static class ModuleExtensions
|
|
|
|
|
{
|
|
|
|
|
private static readonly object FastEndpointsAssembliesKey = new();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Registers the specified assembly for FastEndpoint assembly discovery.
|
|
|
|
|
/// </summary>
|
2023-04-06 12:57:44 +00:00
|
|
|
public static IModule AddFastEndpointsAssembly(this IModule module, Assembly assembly)
|
2022-12-09 11:25:39 +00:00
|
|
|
{
|
|
|
|
|
var assemblies = module.Properties.GetOrAdd(FastEndpointsAssembliesKey, () => new HashSet<Assembly>());
|
|
|
|
|
assemblies.Add(assembly);
|
2023-04-06 12:57:44 +00:00
|
|
|
return module;
|
2022-12-09 11:25:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Registers the assembly for FastEndpoint assembly discovery using the specified marker type.
|
|
|
|
|
/// </summary>
|
2023-04-06 12:57:44 +00:00
|
|
|
public static IModule AddFastEndpointsAssembly<T>(this IModule module) => module.AddFastEndpointsAssembly(typeof(T));
|
2023-04-16 22:11:58 +00:00
|
|
|
|
2022-12-09 11:25:39 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// Registers the assembly for FastEndpoint assembly discovery using the specified marker type.
|
|
|
|
|
/// </summary>
|
2023-04-06 12:57:44 +00:00
|
|
|
public static IModule AddFastEndpointsAssembly(this IModule module, Type markerType) => module.AddFastEndpointsAssembly(markerType.Assembly);
|
2022-12-09 11:25:39 +00:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Returns all collected assemblies for discovery of endpoints.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static IEnumerable<Assembly> GetFastEndpointsAssembliesFromModule(this IModule module) => module.Properties.GetOrAdd(FastEndpointsAssembliesKey, () => new HashSet<Assembly>());
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Adds FastEndpoints to the service container and registers all collected assemblies for discovery of endpoints.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static IModule AddFastEndpointsFromModule(this IModule module)
|
|
|
|
|
{
|
|
|
|
|
var assemblies = module.GetFastEndpointsAssembliesFromModule().ToList();
|
2023-04-16 22:11:58 +00:00
|
|
|
|
2022-12-09 11:25:39 +00:00
|
|
|
module.Services.AddFastEndpoints(options =>
|
|
|
|
|
{
|
|
|
|
|
options.DisableAutoDiscovery = true;
|
|
|
|
|
options.Assemblies = assemblies;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return module;
|
|
|
|
|
}
|
|
|
|
|
}
|