Add drag/drop handling
This commit is contained in:
@@ -4,12 +4,55 @@ namespace TheXamlGuy.TaskbarGroup.Core
|
||||
{
|
||||
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<IEventAggregatorInvoker, EventAggregatorInvoker>()
|
||||
.AddSingleton<IMessageInvoker, MessageInvoker>()
|
||||
.AddSingleton<IMessenger, Messenger>()
|
||||
.AddSingleton<IMediator, Mediator>()
|
||||
.AddSingleton<IInitializable, WndProcMonitor>()
|
||||
|
||||
Reference in New Issue
Block a user