92 lines
3.5 KiB
C#
92 lines
3.5 KiB
C#
#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;
|
|
|
|
#if NET6_0_OR_GREATER
|
|
using System.Runtime.Versioning;
|
|
#endif
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
using Nuclex.Windows.Forms.AutoBinding;
|
|
using Nuclex.Windows.Forms.CommonDialogs;
|
|
using Nuclex.Windows.Forms.Messages;
|
|
|
|
namespace Nuclex.Windows.Forms.DependencyInjection {
|
|
|
|
/// <summary>Sets up the service bindings for an MVVM-based application</summary>
|
|
#if NET6_0_OR_GREATER
|
|
[SupportedOSPlatform("windows")]
|
|
#endif
|
|
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) {
|
|
|
|
// 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, StandardMessageBoxManager>();
|
|
|
|
// Common dialog adapter that uses the built-in common dialogs from
|
|
// basic WinForms to display file open, save or print dialogs
|
|
services.AddSingleton<ICommonDialogService, CommonDialogManager>();
|
|
|
|
return services;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} // namespace Nuclex.Windows.Forms.DependencyInjection
|