WPF приложение на MVVM с использованием CommunityToolkit и Dependency Container
WPF, MVVM, Silverlight | создано: 10.08.2024 | опубликовано: 11.08.2024 | обновлено: 10.11.2024 | просмотров: 466 | всего комментариев: 2
Шаблон проекта WPF с MVVV для Visual Studio, JetBrains Rider и просто для dotnet CLI
Описание
Шаблон для приложения WPF + MVVM содержит компоненты, которые существенно ускорят процесс начала разработки нового приложения. В шаблоне уже все готово для начала старта, потому содержит следующие компоненты:
- CommunityToolkit.Mvvm - Фреймворк с инструментами MVVM.
- Microsoft.Extensions.DependencyInjection - DI-контейнер для вашего приложения.
- Microsoft.Extensions.Logging.Debug — помощь в отображении сообщений отладки в окне отладки Visual Studio.
- Serilog.Extensions.Hosting - интеграция регистратора Serilog с хостом вашего приложения.
- Serilog.Sinks.File - Serilog logger для лог-файла очень полезен при использовании платформы WPF, т.к. нет никакой консоли для записи логов
Вы можно создать новый проект из этого шаблона при помощи Visual Studio, JetBrains Rider или просто из командной строки dotnet CLI.
Установка
Чтобы шаблон появился в списке доступных шаблонов для начала надо устновить его. Так как шаблон является nuget-пакетом, то досточно просто выполнить команду в командной строке:
dotnet new install Calabonga.Wpf.Mvvm.Template
Результатом выполнения может быть примерно такая картинка:
После успешной установки можно открывать Visual Studio или Rider.
Visual Studio
Rider
Первый запуск
После того как проект будет создан, его можно сразу запустить. Вот такое приветственное окно вы увидите или должны увидеть.
Можно начинать сразу писать код, причем, правильный код!
Репозиторий
Calabonga.WpfMvvm.Template on GitHub
Комментарии к статье (2)
#Вопрос. В чём преимущества использования IVersionService(VersionService)?
Может достаточно просто в MainWindowViewModel прописать?
Или есть какие-то нюансы, которые могут всплыть в будущем?
/// <summary>
/// ViewModel for MainWindow
/// </summary>
public partial class MainWindowViewModel : ViewModelBase
{
public MainWindowViewModel(IVersionService versionService)
=> Title = "1.0.5";
}
Исходный вариант кода IVersionService | VersionService.
/// <summary>
/// Demo interface
/// </summary>
public interface IVersionService
{
string Version { get; }
}
/// <summary>
/// Demo interface implementation <see cref="IVersionService"/>
/// </summary>
public class VersionService : IVersionService
{
public VersionService() => Version = "1.0.5";
public string Version { get; }
}
MainWindowViewModel
/// <summary>
/// ViewModel for MainWindow
/// </summary>
public partial class MainWindowViewModel : ViewModelBase
{
public MainWindowViewModel(IVersionService versionService)
=> Title = $"WPF with MVVM (v{versionService.Version})";
}
Данный интерфейс и его реализация изначально задумывались как пример, как демонстрация.
/// <summary>
/// Demo interface
/// </summary>
public interface IVersionService
{
string Version { get; }
}
/// <summary>
/// Demo interface implementation <see cref="IVersionService"/>
/// </summary>
public class VersionService : IVersionService
{
public VersionService() => Version = "1.0.6";
public string Version { get; }
}
О чем свидетельствуют комментарии в исходных текстах.
Другими словами, IVersionService - сервис я добавил только того, чтобы был пример вливания. Если он вам не нравится, то вы можете его вообще удалить. Использовать или не использовать - это решение должны принимать вы самостоятельно.