83 lines
4.4 KiB
C#
83 lines
4.4 KiB
C#
using Avalonia.Controls;
|
|
using Avalonia.Controls.ApplicationLifetimes;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
|
using Toolkit.Foundation;
|
|
using Toolkit.UI.Controls.Avalonia;
|
|
|
|
namespace Toolkit.Avalonia;
|
|
|
|
public static class IServiceCollectionExtensions
|
|
{
|
|
public static IServiceCollection AddAvalonia(this IServiceCollection services)
|
|
{
|
|
services.AddTransient<ITopLevelProvider, TopLevelProvider>();
|
|
services.AddTransient<IFileProvider, FileProvider>();
|
|
services.AddTransient<IFolderProvider, FolderProvider>();
|
|
|
|
services.AddTransient<IClipboardWriter, ClipboardWriter>();
|
|
|
|
services.AddTransient<IImageReader, ImageReader>();
|
|
services.AddTransient<IImageWriter, ImageWriter>();
|
|
services.AddTransient<IImageResizer, ImageResizer>();
|
|
|
|
services.AddTransient<IDispatcher, AvaloniaDispatcher>();
|
|
|
|
services.AddTransient<IContentTemplate, ContentTemplate>();
|
|
services.AddTransient<INavigationRegion, NavigationRegion>();
|
|
|
|
services.AddAsyncHandler<WriteEventArgs<Clipboard<object>>, WriteClipboardHandler>();
|
|
services.AddAsyncHandler<SelectionEventArgs<FolderFilter>, IReadOnlyCollection<string>?, SelectFoldersHandler>();
|
|
services.AddAsyncHandler<SelectionEventArgs<FileFilter>, IReadOnlyCollection<string>?, SelectFilesHandler>();
|
|
|
|
services.AddHandler<NavigateEventArgs<IClassicDesktopStyleApplicationLifetime>, ClassicDesktopStyleApplicationHandler>(nameof(IClassicDesktopStyleApplicationLifetime));
|
|
services.AddHandler<NavigateEventArgs<ISingleViewApplicationLifetime>, SingleViewApplicationHandler>(nameof(ISingleViewApplicationLifetime));
|
|
|
|
services.AddHandler<NavigateEventArgs<ContentControl>, ContentControlHandler>(nameof(ContentControl));
|
|
|
|
services.AddHandler<NavigateEventArgs<Frame>, FrameHandler>(nameof(Frame));
|
|
services.TryAddSingleton<ITransientNavigationStore<Frame>, TransientNavigationStore<Frame>>();
|
|
|
|
services.AddHandler<NavigateEventArgs<ContentDialog>, ContentDialogHandler>(nameof(ContentDialog));
|
|
services.AddHandler<NavigateEventArgs<TaskDialog>, TaskDialogHandler>(nameof(TaskDialog));
|
|
|
|
services.AddScoped<INavigationRegionCollection, NavigationRegionCollection>(provider => new NavigationRegionCollection
|
|
{
|
|
{ typeof(IClassicDesktopStyleApplicationLifetime), typeof(IClassicDesktopStyleApplicationLifetime) },
|
|
{ typeof(ISingleViewApplicationLifetime), typeof(ISingleViewApplicationLifetime) }
|
|
});
|
|
|
|
services.AddTransient((Func<IServiceProvider, IProxyServiceCollection<IComponentBuilder>>)(provider =>
|
|
new ProxyServiceCollection<IComponentBuilder>(services =>
|
|
{
|
|
services.AddTransient<ITopLevelProvider, TopLevelProvider>();
|
|
services.AddTransient<IFileProvider, FileProvider>();
|
|
services.AddTransient<IFolderProvider, FolderProvider>();
|
|
|
|
services.AddTransient<IClipboardWriter, ClipboardWriter>();
|
|
|
|
services.AddTransient<IImageReader, ImageReader>();
|
|
services.AddTransient<IImageWriter, ImageWriter>();
|
|
services.AddTransient<IImageResizer, ImageResizer>();
|
|
|
|
services.AddSingleton(provider.GetRequiredService<IDispatcher>());
|
|
services.AddTransient<IContentTemplate, ContentTemplate>();
|
|
|
|
services.AddTransient<INavigationRegion, NavigationRegion>();
|
|
|
|
services.AddAsyncHandler<WriteEventArgs<Clipboard<object>>, WriteClipboardHandler>();
|
|
services.AddAsyncHandler<SelectionEventArgs<FolderFilter>, IReadOnlyCollection<string>?, SelectFoldersHandler>();
|
|
services.AddAsyncHandler<SelectionEventArgs<FileFilter>, IReadOnlyCollection<string>?, SelectFilesHandler>();
|
|
|
|
services.AddHandler<NavigateEventArgs<ContentControl>, ContentControlHandler>(nameof(ContentControl));
|
|
|
|
services.AddHandler<NavigateEventArgs<Frame>, FrameHandler>(nameof(Frame));
|
|
services.TryAddSingleton<ITransientNavigationStore<Frame>, TransientNavigationStore<Frame>>();
|
|
|
|
services.AddHandler<NavigateEventArgs<ContentDialog>, ContentDialogHandler>(nameof(ContentDialog));
|
|
services.AddHandler<NavigateEventArgs<TaskDialog>, TaskDialogHandler>(nameof(TaskDialog));
|
|
})));
|
|
|
|
return services;
|
|
}
|
|
} |