break widget related stuff into its own project as the main HB project was just becoming too bloated

This commit is contained in:
TheXamlGuy
2024-01-24 20:50:59 +00:00
parent d1b57d5d16
commit 5e26e97f6b
61 changed files with 178 additions and 95 deletions
@@ -0,0 +1,33 @@
using Microsoft.Extensions.Hosting;
using System.Reflection;
using System.Runtime.Loader;
namespace Hyperbar.Widget;
public class WidgetEnumeratorHandler(IHostEnvironment hostEnvironment,
IMediator mediator) :
INotificationHandler<Enumerate<IWidget>>
{
public Task Handle(Enumerate<IWidget> notification,
CancellationToken cancellationToken)
{
string extensionsDirectory = Path.Combine(hostEnvironment.ContentRootPath, "Extensions");
if (Directory.Exists(extensionsDirectory))
{
List<string> assemblyPaths =
[
.. Directory.GetDirectories(extensionsDirectory)
.AsParallel()
.SelectMany(assemblyDirectory => Directory.GetFiles(assemblyDirectory, "*.dll"))
];
Parallel.ForEach(assemblyPaths, (string assemblyPath) =>
{
Assembly assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(assemblyPath);
mediator.PublishAsync(new Created<Assembly>(assembly));
});
}
return Task.CompletedTask;
}
}