Improve loading of widgets

This commit is contained in:
TheXamlGuy
2024-01-21 19:59:32 +00:00
parent 45070dc560
commit c07eafc9cf
49 changed files with 471 additions and 254 deletions
+30 -12
View File
@@ -1,10 +1,12 @@
using Hyperbar.Windows.Controls;
using Hyperbar.Windows.Interop;
using Hyperbar.Windows.UI;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.UI.Xaml;
using System;
using System.Reflection;
namespace Hyperbar.Windows;
@@ -27,24 +29,40 @@ public partial class App :
})
.ConfigureServices((context, services) =>
{
services.AddSingleton<IServiceFactory>(provider =>
new ServiceFactory((type, parameters) => ActivatorUtilities.CreateInstance(provider, type, parameters!)));
services.AddSingleton<IMediator, Mediator>();
services.AddSingleton<IDisposer, Disposer>();
services.AddSingleton<IDispatcher, Dispatcher>();
services.AddDefault();
services.AddHostedService<AppService>();
services.AddConfiguration<AppConfiguration>(args => { args.Placement = DesktopBarPlacemenet.Top; });
services.AddTransient<IInitializer, AppInitializer>();
services.AddSingleton<IDispatcher, Dispatcher>();
services.AddTransient<ITemplateFactory, TemplateFactory>();
services.AddSingleton<DesktopBar>();
services.AddContentTemplate<WidgetBarViewModel, WidgetBarView>();
services.AddTransient<IInitializer, AppInitializer>();
services.AddHandler<AppConfigurationChangedHandler>();
services.AddConfiguration<AppConfiguration>(args =>
{
args.Placement = DesktopBarPlacemenet.Top;
});
services.AddSingleton<DesktopBar>();
services.AddContentTemplate<WidgetBarViewModel, WidgetBarView>();
services.AddTransient<IWidgetServiceCollection>(provider =>
new WidgetServiceCollection(services =>
{
services.AddSingleton<IDispatcher, Dispatcher>();
services.AddTransient<ITemplateFactory, TemplateFactory>();
services.AddScoped<IVirtualKeyboard, VirtualKeyboard>();
services.AddHandler<KeyAcceleratorHandler>();
services.AddHandler<StartProcessHandler>();
services.AddTransient<IWidgetView, WidgetView>();
services.AddContentTemplate<WidgetContainerViewModel, WidgetContainerView>();
services.AddContentTemplate<WidgetButtonViewModel, WidgetButtonView>();
services.AddContentTemplate<WidgetSplitButtonViewModel, WidgetSplitButtonView>();
}));
//services.AddWidget<MediaControllerWidgetBuilder>();
//services.AddWidget<PrimaryWidget>();
@@ -3,59 +3,57 @@ using Hyperbar.Windows.UI;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.UI.Dispatching;
namespace Hyperbar.Windows
{
public static class IServiceCollectionExtensions
{
public static IServiceCollection AddWidget<TWidget>(this IServiceCollection services)
where TWidget :
IWidget,
new()
{
IHost? host = new HostBuilder()
.UseContentRoot(AppContext.BaseDirectory)
.ConfigureAppConfiguration(config =>
{
config.SetBasePath(AppContext.BaseDirectory);
config.AddJsonFile("Settings.json", true, true);
//public static class IServiceCollectionExtensions
//{
// public static IServiceCollection AddWidget<TWidget>(this IServiceCollection services)
// where TWidget :
// IWidget,
// new()
// {
// IHost? host = new HostBuilder()
// .UseContentRoot(AppContext.BaseDirectory)
// .ConfigureAppConfiguration(config =>
// {
// config.SetBasePath(AppContext.BaseDirectory);
// config.AddJsonFile("Settings.json", true, true);
// })
// .ConfigureServices((context, isolatedServices) =>
// {
// isolatedServices.AddScoped<IServiceFactory>(provider =>
// new ServiceFactory((type, parameters) => ActivatorUtilities.CreateInstance(provider, type, parameters!)));
config.Build();
})
.ConfigureServices((context, isolatedServices) =>
{
isolatedServices.AddScoped<IServiceFactory>(provider =>
new ServiceFactory((type, parameters) => ActivatorUtilities.CreateInstance(provider, type, parameters!)));
// isolatedServices.AddHostedService<WidgetService>();
// isolatedServices.AddTransient<ITemplateFactory, TemplateFactory>();
isolatedServices.AddHostedService<WidgetService>();
isolatedServices.AddTransient<ITemplateFactory, TemplateFactory>();
// isolatedServices.AddScoped<IMediator, Mediator>();
// isolatedServices.AddScoped<IDisposer, Disposer>();
// isolatedServices.AddSingleton<IDispatcher, Dispatcher>();
isolatedServices.AddScoped<IMediator, Mediator>();
isolatedServices.AddScoped<IDisposer, Disposer>();
isolatedServices.AddSingleton<IDispatcher, Dispatcher>();
// isolatedServices.AddScoped<IVirtualKeyboard, VirtualKeyboard>();
isolatedServices.AddScoped<IVirtualKeyboard, VirtualKeyboard>();
// isolatedServices.AddHandler<KeyAcceleratorHandler>();
// isolatedServices.AddHandler<StartProcessHandler>();
isolatedServices.AddHandler<KeyAcceleratorHandler>();
isolatedServices.AddHandler<StartProcessHandler>();
// isolatedServices.AddTransient<IWidgetView, WidgetView>();
isolatedServices.AddTransient<IWidgetView, WidgetView>();
// isolatedServices.AddContentTemplate<WidgetContainerViewModel, WidgetContainerView>();
// isolatedServices.AddContentTemplate<WidgetButtonViewModel, WidgetButtonView>();
// isolatedServices.AddContentTemplate<WidgetSplitButtonViewModel, WidgetSplitButtonView>();
isolatedServices.AddContentTemplate<WidgetContainerViewModel, WidgetContainerView>();
isolatedServices.AddContentTemplate<WidgetButtonViewModel, WidgetButtonView>();
isolatedServices.AddContentTemplate<WidgetSplitButtonViewModel, WidgetSplitButtonView>();
// TWidget widget = new();
// IWidgetBuilder builder = widget.Create();
TWidget widget = new();
IWidgetBuilder builder = widget.Create();
isolatedServices.AddRange(builder.Services);
// isolatedServices.AddRange(builder.Services);
}).Build();
// }).Build();
services.AddTransient(provider => new WidgetContext(host.Services));
// services.AddTransient(provider => new WidgetContext(host.Services));
host.Start();
return services;
}
}
// host.Start();
// return services;
// }
//}
}