Fixed InitializationScoped

This commit is contained in:
Dan Clark
2024-12-05 16:11:48 +00:00
parent 6454e1bb6f
commit 8bbfc415e6
3 changed files with 35 additions and 5 deletions
+2 -4
View File
@@ -1,6 +1,4 @@
namespace Toolkit.Foundation;
public interface IInitializationScoped
{
void Initialize();
}
public interface IInitializationScoped :
IInitialization;
@@ -62,12 +62,16 @@ public static class IServiceCollectionExtensions
if (key is { Length: > 0 })
{
services.Add(new ServiceDescriptor(typeof(IAsyncHandler<TMessage, TResponse>), key, typeof(THandler), lifetime));
services.AddInitializationScoped<AsyncHandlerKeyedInitialization<TMessage, TResponse, IAsyncHandler<TMessage, TResponse>>>(key);
services.AddInitialization<AsyncHandlerKeyedInitialization<TMessage, TResponse, IAsyncHandler<TMessage, TResponse>>>(key);
}
else
{
services.Add(new ServiceDescriptor(typeof(IAsyncHandler<TMessage, TResponse>), typeof(THandler), lifetime));
services.AddInitializationScoped<AsyncHandlerInitialization<TMessage, TResponse, IAsyncHandler<TMessage, TResponse>>>();
services.AddInitialization<AsyncHandlerInitialization<TMessage, TResponse, IAsyncHandler<TMessage, TResponse>>>();
}
return services;
@@ -85,12 +89,16 @@ public static class IServiceCollectionExtensions
if (key is { Length: > 0 })
{
services.Add(new ServiceDescriptor(typeof(IAsyncHandler<TMessage>), key, typeof(THandler), lifetime));
services.AddInitializationScoped<AsyncHandlerKeyedInitialization<TMessage, IAsyncHandler<TMessage>>>(key);
services.AddInitialization<AsyncHandlerKeyedInitialization<TMessage, IAsyncHandler<TMessage>>>(key);
}
else
{
services.Add(new ServiceDescriptor(typeof(IAsyncHandler<TMessage>), typeof(THandler), lifetime));
services.AddInitializationScoped<AsyncHandlerInitialization<TMessage, IAsyncHandler<TMessage>>>();
services.AddInitialization<AsyncHandlerInitialization<TMessage, IAsyncHandler<TMessage>>>();
}
return services;
@@ -220,12 +228,16 @@ public static class IServiceCollectionExtensions
if (key is { Length: > 0 })
{
services.Add(new ServiceDescriptor(typeof(IHandler<TMessage>), key, typeof(THandler), lifetime));
services.AddInitializationScoped<HandlerKeyedInitialization<TMessage, IHandler<TMessage>>>(key);
services.AddInitialization<HandlerKeyedInitialization<TMessage, IHandler<TMessage>>>(key);
}
else
{
services.Add(new ServiceDescriptor(typeof(IHandler<TMessage>), typeof(THandler), lifetime));
services.AddInitializationScoped<HandlerInitialization<TMessage, IHandler<TMessage>>>();
services.AddInitialization<HandlerInitialization<TMessage, IHandler<TMessage>>>();
}
return services;
@@ -240,15 +252,21 @@ public static class IServiceCollectionExtensions
string? key = null) where THandler : class, IHandler<TMessage, TResponse>
where TMessage : class
{
services.AddHandler<TMessage, TResponse, THandler>(lifetime, key);
if (key is { Length: > 0 })
{
services.Add(new ServiceDescriptor(typeof(IHandler<TMessage, TResponse>), key, typeof(THandler), lifetime));
services.AddInitializationScoped<HandlerKeyedInitialization<TMessage, TResponse, IHandler<TMessage, TResponse>>>(key);
services.AddInitialization<HandlerKeyedInitialization<TMessage, TResponse, IHandler<TMessage, TResponse>>>(key);
}
else
{
services.Add(new ServiceDescriptor(typeof(IHandler<TMessage, TResponse>), typeof(THandler), lifetime));
services.AddInitializationScoped<HandlerInitialization<TMessage, TResponse, IHandler<TMessage, TResponse>>>();
services.AddInitialization<HandlerInitialization<TMessage, TResponse, IHandler<TMessage, TResponse>>>();
}
return services;
@@ -294,7 +312,7 @@ public static class IServiceCollectionExtensions
where TInitializationImplementation : class, IInitializationScoped
{
services.Add(new ServiceDescriptor(typeof(IInitializationScoped), typeof(TInitializationImplementation), lifetime));
services.AddTransient<IInitializationScoped>(provider => provider.GetRequiredService<IInitializationScoped>());
services.AddTransient(provider => provider.GetRequiredService<IInitializationScoped>());
return services;
}
@@ -50,6 +50,18 @@ public static class ContentTemplateBinding
{
cachedActivation = null;
content.Unloaded -= HandleUnloaded;
content.DataContextChanged -= HandleDataContextChanged;
}
}
void HandleDataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)
{
if (sender is FrameworkElement content)
{
if (content.DataContext is IActivation activation)
{
activation.IsActive = true;
}
}
}
@@ -57,11 +69,13 @@ public static class ContentTemplateBinding
{
content.Loaded += HandleLoaded;
content.Unloaded += HandleUnloaded;
content.DataContextChanged += HandleDataContextChanged;
}
else
{
content.Loaded -= HandleLoaded;
content.Unloaded -= HandleUnloaded;
content.DataContextChanged -= HandleDataContextChanged;
}
}
}