From 9b9330c8ccd48737fb22ab66022f3fc1033976cf Mon Sep 17 00:00:00 2001 From: Dan Clark Date: Tue, 3 Dec 2024 09:55:26 +0000 Subject: [PATCH] Ensure messengers can be used in scopes --- Toolkit.Foundation/AsyncHandlerInitialization.cs | 14 ++++++++------ .../AsyncHandlerKeyedInitialization.cs | 15 +++++++++------ Toolkit.Foundation/DefaultHostBuilder.cs | 2 +- Toolkit.Foundation/HandlerInitialization.cs | 14 ++++++++------ Toolkit.Foundation/HandlerKeyedInitialization.cs | 16 ++++++++++------ Toolkit.Windows/WndProc.cs | 1 + 6 files changed, 37 insertions(+), 25 deletions(-) diff --git a/Toolkit.Foundation/AsyncHandlerInitialization.cs b/Toolkit.Foundation/AsyncHandlerInitialization.cs index 5585331..e170665 100644 --- a/Toolkit.Foundation/AsyncHandlerInitialization.cs +++ b/Toolkit.Foundation/AsyncHandlerInitialization.cs @@ -3,15 +3,16 @@ using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; -public class AsyncHandlerInitialization(IServiceProvider provider) : +public class AsyncHandlerInitialization(IMessenger messenger, + IServiceProvider provider) : IInitialization where THandler : class, IAsyncHandler where TMessage : class { public void Initialize() { - if (!StrongReferenceMessenger.Default.IsRegistered>(provider)) + if (!messenger.IsRegistered>(provider)) { - StrongReferenceMessenger.Default.Register>(provider, + messenger.Register>(provider, (provider, args) => { IEnumerable> handlers = provider.GetServices>(); @@ -30,15 +31,16 @@ public class AsyncHandlerInitialization(IServiceP } } -public class AsyncHandlerInitialization(IServiceProvider provider) : +public class AsyncHandlerInitialization(IMessenger messenger, + IServiceProvider provider) : IInitialization where THandler : class, IAsyncHandler where TMessage : class { public void Initialize() { - if (!StrongReferenceMessenger.Default.IsRegistered>(provider)) + if (!messenger.IsRegistered>(provider)) { - StrongReferenceMessenger.Default.Register>(provider, + messenger.Register>(provider, (provider, args) => { IEnumerable> handlers = provider.GetServices>(); diff --git a/Toolkit.Foundation/AsyncHandlerKeyedInitialization.cs b/Toolkit.Foundation/AsyncHandlerKeyedInitialization.cs index c13b218..f86ac94 100644 --- a/Toolkit.Foundation/AsyncHandlerKeyedInitialization.cs +++ b/Toolkit.Foundation/AsyncHandlerKeyedInitialization.cs @@ -3,15 +3,17 @@ using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; -public class AsyncHandlerKeyedInitialization(string key, IServiceProvider provider) : +public class AsyncHandlerKeyedInitialization(string key, + IMessenger messenger, + IServiceProvider provider) : IInitialization where THandler : class, IAsyncHandler where TMessage : class { public void Initialize() { - if (!StrongReferenceMessenger.Default.IsRegistered, string>(provider, key)) + if (!messenger.IsRegistered, string>(provider, key)) { - StrongReferenceMessenger.Default.Register, string>(provider, key, + messenger.Register, string>(provider, key, (provider, args) => { IEnumerable> handlers = provider.GetKeyedServices>(key); @@ -30,15 +32,16 @@ public class AsyncHandlerKeyedInitialization(string key, ISe } } -public class AsyncHandlerKeyedInitialization(string key, IServiceProvider provider) : +public class AsyncHandlerKeyedInitialization(string key, IMessenger messenger, + IServiceProvider provider) : IInitialization where THandler : class, IAsyncHandler where TMessage : class { public void Initialize() { - if (!StrongReferenceMessenger.Default.IsRegistered, string>(provider, key)) + if (!messenger.IsRegistered, string>(provider, key)) { - StrongReferenceMessenger.Default.Register, string>(provider, key, + messenger.Register, string>(provider, key, (provider, args) => { IEnumerable> handlers = provider.GetKeyedServices>(key); diff --git a/Toolkit.Foundation/DefaultHostBuilder.cs b/Toolkit.Foundation/DefaultHostBuilder.cs index 58894be..effb767 100644 --- a/Toolkit.Foundation/DefaultHostBuilder.cs +++ b/Toolkit.Foundation/DefaultHostBuilder.cs @@ -22,7 +22,7 @@ public class DefaultHostBuilder : ComponentHostCollection>(); services.AddSingleton(); - services.AddSingleton(_ => StrongReferenceMessenger.Default); + services.AddScoped(); services.AddTransient(); services.AddTransient(); diff --git a/Toolkit.Foundation/HandlerInitialization.cs b/Toolkit.Foundation/HandlerInitialization.cs index bb344ec..5bd5954 100644 --- a/Toolkit.Foundation/HandlerInitialization.cs +++ b/Toolkit.Foundation/HandlerInitialization.cs @@ -3,15 +3,16 @@ using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; -public class HandlerInitialization(IServiceProvider provider) : +public class HandlerInitialization(IMessenger messenger, + IServiceProvider provider) : IInitialization where THandler : class, IHandler where TMessage : class { public void Initialize() { - if (!StrongReferenceMessenger.Default.IsRegistered>(provider)) + if (!messenger.IsRegistered>(provider)) { - StrongReferenceMessenger.Default.Register>(provider, + messenger.Register>(provider, (provider, args) => { IEnumerable> handlers = provider.GetServices>(); @@ -31,15 +32,16 @@ public class HandlerInitialization(IServiceProvid } -public class HandlerInitialization(IServiceProvider provider) : +public class HandlerInitialization(IMessenger messenger, + IServiceProvider provider) : IInitialization where THandler : class, IHandler where TMessage : class { public void Initialize() { - if (!StrongReferenceMessenger.Default.IsRegistered(provider)) + if (!messenger.IsRegistered(provider)) { - StrongReferenceMessenger.Default.Register(provider, + messenger.Register(provider, (provider, args) => { IEnumerable> handlers = provider.GetServices>(); diff --git a/Toolkit.Foundation/HandlerKeyedInitialization.cs b/Toolkit.Foundation/HandlerKeyedInitialization.cs index ff7219a..62f1741 100644 --- a/Toolkit.Foundation/HandlerKeyedInitialization.cs +++ b/Toolkit.Foundation/HandlerKeyedInitialization.cs @@ -3,15 +3,17 @@ using Microsoft.Extensions.DependencyInjection; namespace Toolkit.Foundation; -public class HandlerKeyedInitialization(string key, IServiceProvider provider) : +public class HandlerKeyedInitialization(string key, + IMessenger messenger, + IServiceProvider provider) : IInitialization where THandler : class, IHandler where TMessage : class { public void Initialize() { - if (!StrongReferenceMessenger.Default.IsRegistered(provider, key)) + if (!messenger.IsRegistered(provider, key)) { - StrongReferenceMessenger.Default.Register(provider, key, + messenger.Register(provider, key, (provider, args) => { IEnumerable> handlers = provider.GetKeyedServices>(key); @@ -41,15 +43,17 @@ public class HandlerKeyedInitialization(string key, IService } } -public class HandlerKeyedInitialization(string key, IServiceProvider provider) : +public class HandlerKeyedInitialization(string key, + IMessenger messenger, + IServiceProvider provider) : IInitialization where THandler : class, IHandler where TMessage : class { public void Initialize() { - if (!StrongReferenceMessenger.Default.IsRegistered, string>(provider, key)) + if (!messenger.IsRegistered, string>(provider, key)) { - StrongReferenceMessenger.Default.Register, string>(provider, key, + messenger.Register, string>(provider, key, (provider, args) => { IEnumerable> handlers = provider.GetKeyedServices>(key); diff --git a/Toolkit.Windows/WndProc.cs b/Toolkit.Windows/WndProc.cs index ae0076f..9ba21ef 100644 --- a/Toolkit.Windows/WndProc.cs +++ b/Toolkit.Windows/WndProc.cs @@ -38,6 +38,7 @@ public class WndProc(IMessenger messenger) : PInvoke.DestroyWindow((HWND)Handle); } + private LRESULT HandleWndProc(HWND hWnd, uint msg, WPARAM wParam, LPARAM lParam) {