From 65792cf4b037ec3f48d8e8c54de775608a519db8 Mon Sep 17 00:00:00 2001 From: artyom Date: Fri, 2 Apr 2021 02:21:08 +0300 Subject: [PATCH 1/3] feature: Disable ReactiveUI platform registrations --- build/ReactiveUI.props | 2 +- src/Avalonia.ReactiveUI/AppBuilderExtensions.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build/ReactiveUI.props b/build/ReactiveUI.props index f74ab07e31..c3b136d41d 100644 --- a/build/ReactiveUI.props +++ b/build/ReactiveUI.props @@ -1,5 +1,5 @@ - + diff --git a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs b/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs index 6771d3e179..fa666e2125 100644 --- a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs +++ b/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs @@ -17,6 +17,8 @@ namespace Avalonia.ReactiveUI { return builder.AfterPlatformServicesSetup(_ => { + PlatformRegistrationManager.SetRegistrationNamespaces(RegistrationNamespace.Avalonia); + Locator.CurrentMutable.InitializeReactiveUI(); RxApp.MainThreadScheduler = AvaloniaScheduler.Instance; Locator.CurrentMutable.RegisterConstant(new AvaloniaActivationForViewFetcher(), typeof(IActivationForViewFetcher)); Locator.CurrentMutable.RegisterConstant(new AutoDataTemplateBindingHook(), typeof(IPropertyBindingHook)); From cc5568781cf046d8b81efe0fc56137b1fe920499 Mon Sep 17 00:00:00 2001 From: artyom Date: Fri, 2 Apr 2021 02:31:08 +0300 Subject: [PATCH 2/3] Don't initialize things twice --- src/Avalonia.ReactiveUI/AppBuilderExtensions.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs b/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs index fa666e2125..e5250484e2 100644 --- a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs +++ b/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs @@ -18,7 +18,6 @@ namespace Avalonia.ReactiveUI return builder.AfterPlatformServicesSetup(_ => { PlatformRegistrationManager.SetRegistrationNamespaces(RegistrationNamespace.Avalonia); - Locator.CurrentMutable.InitializeReactiveUI(); RxApp.MainThreadScheduler = AvaloniaScheduler.Instance; Locator.CurrentMutable.RegisterConstant(new AvaloniaActivationForViewFetcher(), typeof(IActivationForViewFetcher)); Locator.CurrentMutable.RegisterConstant(new AutoDataTemplateBindingHook(), typeof(IPropertyBindingHook)); From 2045097cc800b27df5c881c9970f617634f795ac Mon Sep 17 00:00:00 2001 From: artyom Date: Fri, 2 Apr 2021 11:45:58 +0300 Subject: [PATCH 3/3] Wrap UseReactiveUI in RegisterResolverCallbackChanged --- src/Avalonia.ReactiveUI/AppBuilderExtensions.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs b/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs index e5250484e2..359da3d7c2 100644 --- a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs +++ b/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs @@ -9,19 +9,22 @@ namespace Avalonia.ReactiveUI { /// /// Initializes ReactiveUI framework to use with Avalonia. Registers Avalonia - /// scheduler and Avalonia activation for view fetcher. Always remember to - /// call this method if you are using ReactiveUI in your application. + /// scheduler, an activation for view fetcher, a template binding hook. Remember + /// to call this method if you are using ReactiveUI in your application. /// public static TAppBuilder UseReactiveUI(this TAppBuilder builder) - where TAppBuilder : AppBuilderBase, new() - { - return builder.AfterPlatformServicesSetup(_ => + where TAppBuilder : AppBuilderBase, new() => + builder.AfterPlatformServicesSetup(_ => Locator.RegisterResolverCallbackChanged(() => { + if (Locator.CurrentMutable is null) + { + return; + } + PlatformRegistrationManager.SetRegistrationNamespaces(RegistrationNamespace.Avalonia); RxApp.MainThreadScheduler = AvaloniaScheduler.Instance; Locator.CurrentMutable.RegisterConstant(new AvaloniaActivationForViewFetcher(), typeof(IActivationForViewFetcher)); Locator.CurrentMutable.RegisterConstant(new AutoDataTemplateBindingHook(), typeof(IPropertyBindingHook)); - }); - } + })); } }