Wrote a small helper class with extension methods to register the Nuclex.Avalonia MVVM services to a Microsoft.Extensions.DependencyInjection IoC container
This commit is contained in:
		
						commit
						708f87357e
					
				
					 4 changed files with 278 additions and 0 deletions
				
			
		
							
								
								
									
										83
									
								
								Source/MvvmExtensions.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								Source/MvvmExtensions.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
#region Apache License 2.0
 | 
			
		||||
/*
 | 
			
		||||
Nuclex .NET Framework
 | 
			
		||||
Copyright (C) 2002-2024 Markus Ewald / Nuclex Development Labs
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
#endregion // Apache License 2.0
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
using Microsoft.Extensions.DependencyInjection;
 | 
			
		||||
 | 
			
		||||
using Nuclex.Avalonia.AutoBinding;
 | 
			
		||||
using Nuclex.Avalonia.Messages;
 | 
			
		||||
 | 
			
		||||
namespace Nuclex.Avalonia.DependencyInjection {
 | 
			
		||||
 | 
			
		||||
  /// <summary>Sets up the service bindings for an MVVM-based application</summary>
 | 
			
		||||
  public static class MvvmExtensions {
 | 
			
		||||
 | 
			
		||||
    /// <summary>Registers all MVVM supporting services for a WinForms application</summary>
 | 
			
		||||
    /// <param name="services">Service collection the services will be registered to</param>
 | 
			
		||||
    /// <returns>The service collection for method chaining</returns>
 | 
			
		||||
    public static IServiceCollection AddMvvm(this IServiceCollection services) {
 | 
			
		||||
 | 
			
		||||
      // Allow displaying message boxes via the AvaloniaMessagePresenter which wraps
 | 
			
		||||
      // the MessageBox.Avalonia library
 | 
			
		||||
      services.AddSingleton<IMessageService, AvaloniaMessagePresenter>();
 | 
			
		||||
 | 
			
		||||
      // The window manager keeps track of which Window is in the foreground
 | 
			
		||||
      // and handles opening modal or modeless windows for which it either
 | 
			
		||||
      // binds provided view models or requests new instances.
 | 
			
		||||
      services.AddSingleton<WindowManager, DependencyInjectedWindowManager>();
 | 
			
		||||
 | 
			
		||||
      // The IWindowManager is the main interface that should be used to
 | 
			
		||||
      // create new windows and dialogs
 | 
			
		||||
      services.AddSingleton<IWindowManager>(
 | 
			
		||||
        sp => sp.GetRequiredService<WindowManager>()
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // The IActiveWindowTracker is a very simple interface to let Windows Forms
 | 
			
		||||
      // extensions that need to display message boxes or other things query for
 | 
			
		||||
      // the currently active top-level window.
 | 
			
		||||
      services.AddSingleton<IActiveWindowTracker>(
 | 
			
		||||
        sp => sp.GetRequiredService<WindowManager>()
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // The auto binder uses convention-over-configuration to automatically
 | 
			
		||||
      // establish data bindings or call view model methods that share their name
 | 
			
		||||
      // with button controls.
 | 
			
		||||
      services.AddSingleton<IAutoBinder, ConventionBinder>();
 | 
			
		||||
 | 
			
		||||
      return services;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>Registers all MVVM supporting services for a WinForms application</summary>
 | 
			
		||||
    /// <param name="services">Service collection the services will be registered to</param>
 | 
			
		||||
    /// <returns>The service collection for method chaining</returns>
 | 
			
		||||
    public static IServiceCollection AddCommonDialogs(this IServiceCollection services) {
 | 
			
		||||
 | 
			
		||||
      // Implementation of the message service that uses plain MessageBoxes
 | 
			
		||||
      // from the Win32 API to display messages to the user
 | 
			
		||||
      services.AddSingleton<IMessageService, AvaloniaMessagePresenter>();
 | 
			
		||||
 | 
			
		||||
      return services;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
} // namespace Nuclex.Avalonia.DependencyInjection
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue