using System.Reflection;
using Elsa.Features.Services;
using FastEndpoints;
// ReSharper disable once CheckNamespace
namespace Elsa.Extensions;
///
/// Provides extensions to .
///
public static class ModuleExtensions
{
private static readonly object FastEndpointsAssembliesKey = new();
///
/// Registers the specified assembly for FastEndpoint assembly discovery.
///
public static IModule AddFastEndpointsAssembly(this IModule module, Assembly assembly)
{
var assemblies = module.Properties.GetOrAdd(FastEndpointsAssembliesKey, () => new HashSet());
assemblies.Add(assembly);
return module;
}
///
/// Registers the assembly for FastEndpoint assembly discovery using the specified marker type.
///
public static IModule AddFastEndpointsAssembly(this IModule module) => module.AddFastEndpointsAssembly(typeof(T));
///
/// Registers the assembly for FastEndpoint assembly discovery using the specified marker type.
///
public static IModule AddFastEndpointsAssembly(this IModule module, Type markerType) => module.AddFastEndpointsAssembly(markerType.Assembly);
///
/// Returns all collected assemblies for discovery of endpoints.
///
public static IEnumerable GetFastEndpointsAssembliesFromModule(this IModule module) => module.Properties.GetOrAdd(FastEndpointsAssembliesKey, () => new HashSet());
///
/// Adds FastEndpoints to the service container and registers all collected assemblies for discovery of endpoints.
///
public static IModule AddFastEndpointsFromModule(this IModule module)
{
var assemblies = module.GetFastEndpointsAssembliesFromModule().ToList();
module.Services.AddFastEndpoints(options =>
{
options.DisableAutoDiscovery = true;
options.Assemblies = assemblies;
});
return module;
}
}