Files
dan_clark@outlook.com 40d8caf1e0 Set up IHostEnvironment
2022-03-27 15:44:43 +01:00

84 lines
3.6 KiB
C#

using Microsoft.Extensions.DependencyInjection;
namespace TheXamlGuy.TaskbarGroup.Core
{
public static class PointerLocationExtensions
{
public static bool IsWithinBounds(this PointerLocation args, Rect bounds)
{
if (args.X >= bounds.X
&& args.X <= bounds.X + bounds.Width
&& args.Y >= bounds.Y
&& args.Y <= bounds.Y + bounds.Height)
{
return true;
}
else
{
return false;
}
}
}
public static class IServiceCollectionExtensions
{
public static IServiceCollection AddAsyncHandler<TAsyncMessageHandle>(this IServiceCollection serviceCollection)
where TAsyncMessageHandle : IAsyncMessageHandler
{
if (typeof(TAsyncMessageHandle).GetInterfaces().FirstOrDefault(x =>
x.GetGenericTypeDefinition() == typeof(IAsyncMessageHandler<>)
|| x.GetGenericTypeDefinition() == typeof(IAsyncMessageHandler<>)) is { } messageHandler)
{
var messageArguments = messageHandler.GetGenericArguments();
if (messageArguments is { Length: 1 })
{
serviceCollection.AddTransient(typeof(IAsyncMessageHandler<>).MakeGenericType(messageArguments[0]), typeof(TAsyncMessageHandle));
}
else
{
serviceCollection.AddTransient(typeof(IAsyncMessageHandler<,>).MakeGenericType(messageArguments[0], messageArguments[1]), typeof(TAsyncMessageHandle));
}
}
return serviceCollection;
}
public static IServiceCollection AddHandler<TMessageHandle>(this IServiceCollection serviceCollection)
where TMessageHandle : IMessageHandler
{
if (typeof(TMessageHandle).GetInterfaces().FirstOrDefault(x =>
x.GetGenericTypeDefinition() == typeof(IMessageHandler<>)
|| x.GetGenericTypeDefinition() == typeof(IMessageHandler<,>)) is { } messageHandler)
{
var messageArguments = messageHandler.GetGenericArguments();
if (messageArguments is { Length: 1 })
{
serviceCollection.AddTransient(typeof(IMessageHandler<>).MakeGenericType(messageArguments[0]), typeof(TMessageHandle));
}
else
{
serviceCollection.AddTransient(typeof(IMessageHandler<,>).MakeGenericType(messageArguments[0], messageArguments[1]), typeof(TMessageHandle));
}
}
return serviceCollection;
}
public static IServiceCollection AddRequiredCore(this IServiceCollection serviceCollection)
{
return serviceCollection
.AddSingleton<IDisposer, Disposer>()
.AddSingleton<IServiceFactory>(provider => new ServiceFactory(provider.GetService, (type, parameter) => ActivatorUtilities.CreateInstance(provider, type, parameter)))
.AddSingleton<IMessageInvoker, MessageInvoker>()
.AddSingleton<IMessenger, Messenger>()
.AddSingleton<IMediator, Mediator>()
.AddSingleton<IWndProcMonitor, WndProcMonitor>()
.AddSingleton<ITaskbar, Taskbar>()
.AddSingleton<ITaskbarList, TaskbarList>()
.AddSingleton<IPointerMonitor, PointerMonitor>()
.AddSingleton<ITaskbarButtonMonitor, TaskbarButtonMonitor>()
.AddSingleton<ITaskbarButtonShortcutMonitor, TaskbarButtonShortcutMonitor>();
}
}
}