Управление состоянием / сеансом — единство с WPF

#c# #wpf #inversion-of-control #unity-container #desktop-application

#c# #wpf #инверсия контроля #единство-контейнер #настольное приложение

Вопрос:

Я работаю над настольным приложением с WPF и Unity. Я хочу понять, каков наилучший способ управления пользователем projects в моем приложении. У меня многоуровневая архитектура со слоями домена, данных, приложений, пользовательского интерфейса. У меня есть контейнер, в котором регистрируются компоненты из этих проектов. У некоторых из них есть срок службы проекта.

На самом деле я раньше не использовал дочерние контейнеры. Мне интересно, должен ли я создавать новый дочерний контейнер с регистрацией необходимых мне сервисов на весь срок службы проекта в виде синглтона при каждом проекте, который пользователь создает / открывает. В настоящее время у меня есть синглтон со сроком службы всего приложения, и я повторно инициализирую синглтоны в границах проекта.

  • Ищете идеи для дизайна
  • Я полагаю, что память на самом деле не освобождается, когда я закрываю существующий проект. Возможно, удаление дочернего контейнера (если он у меня есть) решит эту проблему?

Комментарии:

1. Вы нигде не объяснили достаточно близко для хорошего ответа. Пожалуйста, объясните точно, что вы подразумеваете под пользовательскими проектами? Как вы используете компоненты? Вам вообще нужны контейнеры для них? Если все это динамично, то откуда вы знаете зависимости? Если вы этого не сделаете, то что добавят разрешающие компоненты?

2. Пользовательские проекты — нечто похожее на класс настольных приложений, где пользователю необходимо создать проект и сохранить данные. Например, если я работаю в photoshop, мне нужно создать проект и сохранить его. Так что позже я смогу снова открыть этот проект. Для VS файл .csproj хранит всю информацию, необходимую для резервного копирования проекта. У меня аналогичная потребность. Пользователь хранит множество конфигураций, которые хранятся как часть проекта, над которым работает пользователь. Да, мне нужны контейнеры, поскольку мои сервисы внедряются верхними уровнями. например: контроллер пользовательского интерфейса вызывает метод в службе.