WPF приложение на MVVM с использованием CommunityToolkit и Dependency Container

WPF, MVVM, Silverlight | создано: 10.08.2024 | опубликовано: 11.08.2024 | обновлено: 15.08.2024 | просмотров: 279 | всего комментариев: 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

Поблагодарить

Хотите тоже получать донаты? Тогда заходите на boosty.to и регистрируйтесь!

Кстати, я использую хостинг reg.ru. Подключайся с промокодом 9A17-953A-8591-CF98 чтобы получить скидку 5%

Комментарии к статье (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 - сервис я добавил только того, чтобы был пример вливания. Если он вам не нравится, то вы можете его вообще удалить. Использовать или не использовать - это решение должны принимать вы самостоятельно. 

  1. Отправляя комментарий и предоставляя сайту персональные данные, вы соглашаетесь с Политикой конфиденциальности, которая установлена на сайте.
  2. Все комментарии проверяются модератором на предмет наличия идиоматических выражений и нецензурных слов. Теги-ссылки будут удалены из текста сообщения.