Improve loading of widgets
This commit is contained in:
@@ -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;
|
||||
// }
|
||||
//}
|
||||
}
|
||||
Reference in New Issue
Block a user